Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Adrian1911

pisanie programu w Pascalu

Polecane posty

Moim problemem jest napisanie pewnego programu w Pascalu, który będzie działał w kompilatorze. Dopiero piszę programy takie podstawowe, czyli np. obliczanie pola trapezu. Zazwyczaj są banalne ale teraz to już ciężko mi jest stworzyć tym bardziej, że ostatnio nam namieszał niepotrzebnie. Najpierw zacytuję słowa sora "w pętli ma pytać o hasło, jeśli hasło będzie true to ma wyświetlić imię i nazwisko". Poznałem instrukcje Case selektor OF, pętle FOR, WHILE. To takie z ważniejszych, które znam. Mam stworzyć program, w który ma mnie pytać o podanie hasła, jeśli będzie prawdziwe to program ma wyświetlić imię i nazwisko, a jeśli będzie błędne to ma wyświetlić błędne hasło i pytać ponownie. Bardzo proszę o szybką pomoc, bo w piątek mam lekcję a na razie mam same dobre oceny i nie chcę mieć gały tylko za to, że 3 osoby zdenerwowały sora.

Link do komentarza
Udostępnij na innych stronach

Moim problemem jest napisanie pewnego programu w Pascalu, który będzie działał w kompilatorze.

Nie rozumiem. Jak niby program ma działać w kompilatorze? Zrozumiałbym, że program ma działać po skompilowaniu, ale w kompilatorze?

Najpierw zacytuję słowa sora "w pętli ma pytać o hasło, jeśli hasło będzie true to ma wyświetlić imię i nazwisko".

No i nie wiem gdzie problem. W programie masz gdzieś zapisane hasło. Prosisz użytkownika o podanie go i sprawdzasz, czy się zgadza, jeśli nie, to pytasz ponownie, jeśli tak, to opuszczasz pętlę.

Poznałem instrukcje Case selektor OF, pętle FOR, WHILE.

Można to zrobić na dwa sposoby (tzn. jest trochę więcej sposobów, ale dwa są sensowne). Jeśli znasz konstrukcję repeat blablabla until, to używasz jej w taki sposób:

repeat

prośba o podanie hasła i wczytanie go

until i tu sprawdzasz, czy hasła się zgadzają.

Jeśli nie znasz tej konstrukcji, to używasz pętli while w ten sposób, że przed wejściem do pętli prosisz o podanie hasła, w warunku wejścia do pętli sprawdzasz, czy hasła się zgadzają, a w samej pętli znowu prosisz o podanie hasła.

Ogólnie banał, jeśli wiesz co chcesz zrobić. W razie wątpliwości zamieść kod, który masz i pisz z czym konkretnie masz problem.

Link do komentarza
Udostępnij na innych stronach

Deklarujesz stałą i przypisujesz jej hasło, potem deklarujesz zmienną i w pętli pytasz o hasło, potem porównujesz czy hasło się zgadza, jeśli się zgadza to program wychodzi z pętli, jeśli nie to pętla zakręci się jeszcze raz. Pętla repeat byłaby najlepsza, while ma przeciwny warunek względem repeat, możesz jeszcze dać warunek (IF) i etykietę (Label)

Link do komentarza
Udostępnij na innych stronach

sprawa jest taka:

nie znam pascala, ale napisanie czegos takiego nie powinno zajac wiecej niz 5 min

1. przypisujesz zmiennej haslo jakiekolwiek haslo (jakie tam chcerz)

2. tworzysz zmienna podane_haslo

3. tworzysz zmienna czy_haslo_jest_poprwane (ustawiasz wartosc tej zmiennej na 0)

4. robisz pętele while, ktora dziala dopoki zmienna czy_haslo jest poprawne, no i w tej petli robisz tak:

a) zczytaj haslo_podane_przez_uzytkownika

b) jesli (if !) haslo_podane_przez_uzytkownika jest takie samo jak haslo, to wyswietl imie,nazwiska, ustaw zmienna czy_haslo_jest_poprwane na 1) i zakoncz program

c) jesli haslo+podane_przez_uztykownika nie jest takie samo jak haslo, to wyswiet haslo_podane_przez_uzytkownika

5. zdobądź piękną szóstke

PS.

fajnie sie pisze 3 razy to same, nie ? :D

Link do komentarza
Udostępnij na innych stronach

Ja mam bardzo podobne zadanie (z tą różnicą na końcu ma być odczytanie zmiennych a i b, a potem dodanie ich). Zrobiłem coś takiego (na razie ma tylko wyświetlić napis "dziala" po podaniu dobrego hasła):

program dodawanie_z_haslem;
uses Crt;
var
  a: integer;
  b: integer;
  haslo: string;
  wpis: string;
  spr: integer;

begin
  ClrScr;
  haslo:='haslo';
  spr:=0;
  while spr<>1 do begin
                  readln (wpis);
                  if wpis = haslo then spr:=1
                                  else spr:=0;
                  end;
  writeln ('dziala');
  readln;
end.

I wyświetla mi się błąd:

Error 200: Division by 0

A ja nigdzie nie dzielę... Program musi sobie gdzieś dzielić, a ja nie wiem gdzie. Ma ktoś jakieś sugestie dlaczego to tak działa?

Link do komentarza
Udostępnij na innych stronach

Jest to błąd w bibliotece crt. Zawarta jest w niej procedura delay, która wymaga pomiaru prędkości procesora (wykonuje się nawet wtedy, gdy nie korzystasz z procedury delay). Dla procków szybszych niż 200 MHz pojawia się wtedy błąd: Division by 0. Rozwiązanie tego problemu jest proste, wystarczy zainstalować patch'a. Wstukaj w guglach 'turbo pascal division by 0 patch', to go znajdziesz.

Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...