Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Off topic (https://forum.cdrinfo.pl/f5/)
-   -   Turbo Pascal (https://forum.cdrinfo.pl/f5/turbo-pascal-29112/)

cinma 22.12.2003 15:21

Cytat:

Napisany przez Banana Coctail
A znasz funkcje która spytałaby by użytkownika "Jeśli chcesz wyjść naciśnij W a jeśli chcesz wykonać jakieś działanie naciśnij T"

jak napisal pawelblu - jest wiele mozliwosci, zalezy od tego, co chcesz zrobic
ale ogolnie to mozna zapisac tak:
Kod:

program

// deklaracja typow
// deklaracja zmiennych

var
  odp : Char;
begin
  // tu moze byc jakis kod

  // pytamy o akcje
  Write('Co chcesz zrobic? ');
  ReadLn(odp);

  while (UpCase(odp) <> 'W') do begin  // dopoki uzytkownik nie wpisal 'w' lub 'W'
    case UpCase(odp) of
      // tutaj lista mozliwosci
      'A' : ProceduraA;  // wywolanie procedury A
      'B' : ProceduraB;  // wywolanie procedury B
      'C' : ProceduraC;  // wywolanie procedury C
    else  // podano inna wartosc
      WriteLn('Podales ', odp, ', nie ma takiej mozliwosci.');
    end;  // case

    // pytamy o akcje
    Write('Co chcesz zrobic? ');
    ReadLn(odp)
  end;  // while

  WriteLn('No to konczymy.');

  // tu moze byc jakis kod, ktory wykona sie przed zakonczeniem programu
end.

a ladniej to mozna by tu zrobic funkcje, ktora pyta o akcje i zwraca odpowiednia wartosc, zalezna od odpowiedzi
Kod:

function CoRobimy : Integer;
// funkcja, ktora wyswietla 'menu', pyta uzytkownika
// o akcje i zwraca wartosc odpowiedzi
var
  odp : Integer;
begin
  // pytamy o akcje
  WriteLn('1. procedura pierwsza');
  WriteLn('2. procedura druga');
  WriteLn('3. procedura trzecia');
  WriteLn('0. koniec');
  Write('Co chcesz zrobic? (wpisz 1, 2, 3 lob 0) ');

  // wczytujemy odpowiedz
  ReadLn(odp);

  // zwracamy odpowiedz
  Result := odp
end;  //  CoRobimy

a potem w programie:

// potrzebne doklaracje
  var
    akcja : Integer;
begin
  // jakis kod

  akcja := CoRobimy;  // wczytujemy odpowiedz
  while ( akcja <> 0 ) do begin
    case akcja of
      1 : Procedura1;
      2 : Procedura2;
      3 : Procedura3;
    else
      WriteLn('Nie ma takiej akcji.')
    end;

    akcja := CoRobimy;  // wczytujemy odpowiedz
  end;  // while

  // jakis kod na koniec
end.


pawelblu 22.12.2003 09:57

masz mnostwo mozliwosci - albo nasz program zrobisz jako funkcje ktorej wykonanie uzaleznisz od instr warunkowej, albo napiszesz po prostu to wszystko w jednej z opcji ifa a druga spowoduje tylko np. writeln(dowidzenia) albo uzyjesz bardzo niemile widzianej instrukcji goto za ktora przynajmniej powinienes zostac upomniany.
Oba programy przesledzilem i jakos braku apostrofa nie zauwazylem.

Banana Coctail 22.12.2003 09:35

Dzięki ale rąbnołeś się w jednym miejscu brakuje apostrofa ale i tak jest dobrze. Dzięki Ci bardzo cinma. A znasz funkcje która spytałaby by użytkownika "Jeśli chcesz wyjść naciśnij W a jeśli chcesz wykonać jakieś działanie naciśnij T"

cinma 22.12.2003 04:51

blagam, uzywajcie komentarzy w swoich kodach koledzy programisci ;)
...a i wciecia sie na pewno przydadza
Kod:

program Liczenie;

uses
  crt;

var
  a, b, suma : Real;
  odp : String;
begin
  clrsrc;  //  czyszczenie ekranu

  WriteLn('Program wykonuje dodawanie i dzielenie.');  //  info

  // wczytanie 1. liczby
  write('Wprowadz 1 liczbe: ');
  ReadLn(a);

  // wczytanie 2. liczby
  write('Wprowadź 2 liczbe: '):
  ReadLn(b);

  // spytanie o dzielenie
  Write(Czy chcesz podzielić sume tych liczb (wpisz TAK lub NIE): ');
  ReadLn(odp);

  suma := a+b;  //  obliczenie sumy
  if (odp = 'TAK') then
    WriteLn('wynik: ', suma/2)  //  wyswietlenie wyniku
  else  //  odp = 'NIE'
    WriteLn('wynik: ', suma);  //  wyswietlenie wyniku

  // nie wiem po co, ale czekamy 5 sek.
  Delay(5000)
end.


pawelblu 22.12.2003 02:16

Przemyslalem to jeszcze. Rozsadniej bedzie zrobic:
var c: char;
potem
writeln('Jezeli chcesz otrzymac srednia arytmetyczna tych liczb to nacisnij t, a jezeli chcesz otrzymac ich sume to nacisnij n:');
c:=readkey;
IF (c='T') or (c='t') THEN begin s:=(a+b)/2; writeln(c) end ELSE
IF (c='N') or (c='n') THEN begin s:=a+b; writeln(c) end ELSE writeln('BLEDNY WPIS');
writeln('Nacisnij dowolny klawisz zeby zakonczyc');
readkey
end.

pawelblu 22.12.2003 01:15

if read('TAK') THEN s:=a+b/2 ELSE read('NIE') s:=a=b
tej linijki bym tak nie zapisal:
1) s:=a=b s przyjmie wart logiczna: czy a=b
2) s:=a+b/2 s bedzie wynosilo a + polowa b
Poza tym ja bym jednak zrobil oddzielnie read(c) c jako string (i chyba lepiej dla swietego spokoju uzywac readln) czyli
=====
readl(c);
IF c=tak THEN s:=(a+b)/2 ELSE
IF c=nie THEN s:=a+b ELSE
begin
writeln('BLEDNY WPIS');
s:=0
end;
=====
begin
...
end;
write (s);
end;
begin
delay(5000)
end.

Za duzo endow, poza tym lepiej chyba zrobic:
=====
writeln(s);
readkey;
end.
=====
wogole to bym zrobil troche inaczej:

program Liczenie;
uses crt;
var a,b,s: real;
var c: string[3]; (nie pamietam juz dobrze czy tak nalezy)

begin
clrsrc;
writeln('Program wykonuje dodawanie i dzielenie ');
writeln('Wprowadz 1 liczbe: ');
read(a);
writeln('Wprowadź 2 liczbe: ');
read(b);
writeln('Czy chcesz podzielić sume tych liczb wpisz TAK lub NIE:');
readl(c);
IF c='TAK' THEN begin s:=(a+b)/2; writeln(c) end ELSE
IF c='NIE' THEN begin s:=a+b; writeln(c) end ELSE writeln('BLEDNY WPIS');
readkey
end.

Chyba tak

PS. - PASCAL SUX :)

andrzejj9 21.12.2003 23:27

a czekaj, jeszcze to mi sie teraz rzucilo w oczy: s:=a=b . Co to ma wlasciwie robic? Chodzilo Ci po prostu o sume? (to po prostu pewnie male przeoczenie).

I jeszcze to poprzednie: s:=a+b/2 . Jezeli to ma byc podzielenie sumy, to chyba trzeba jeszcze jakis nawias dodac (jakkolwiek to sie w Pascalu robilo). Nie pamietam, jak Pascal traktowal kolejnosc dzialan, ale chyba jednak miala ona w nim jakies znaczenie.

andrzejj9 21.12.2003 23:23

Ja tam pascala ledwie liznalem jakis czas temu, ale cos w tej linijce mi sie nie podoba:

if read('TAK') THEN s:=a+b/2 ELSE read('NIE') s:=a=b

Poczatek w porzadku, ale zastanawia mnie to po else. Czy nie mozna darowac sobie tego else i napisac po prostu dwa warunki. Bo z tego, co tu jest, jak dla mnie wynika, ze: jezeli wprowadzone zostanie tak, to ma cos tam zrobic, a jezeli nie, to ma zostac wprowadzone nie i wtedy zrobi cos innego. Nie wiem, moze to jest dobrze, bo z drugiej strony, jezeli nie zostanie wprowadzone tak, to bedzie czekal, az zostanie wprowadzone nie, a inne mozliwosci nie bede w ogole brane pod uwage, czyli dobrze.

W kazdym razie nigdzie poza tym nie widze zadnego bledu, ale tak, jak napisalem, pascala zaledwie liznalem, wiec wcale nie musi to znaczyc, ze takiego nie ma :)

Banana Coctail 21.12.2003 21:18

Turbo Pascal
 
Właśnie się ucze programowania w tym języku. Napisałem "coś", tylko nie wiem czy dobrze. W tym programie chodzi o obliczenie sumy dwóch liczb i ewentualnie o ich podzieleniu przez dwa. Oto źródło tego programu (obeznanych proszę o pomoc):

program Liczenie;

uses crt;

var a,b,s: real;

begin


clrsrc;

write('Program wykonuje dodawanie i dzielenie ');

writeln('Wprowadz 1 liczbe: ');

read(a);

writeln('Wprowadź 2 liczbe: '):
read(b);

writeln(Czy chcesz podzielić sume tych liczb wpisz TAK lub NIE: ')

if read('TAK') THEN s:=a+b/2 ELSE read('NIE') s:=a=b

end;
write (s);
end;
begin
delay(5000)
end.

Odpowiedź potrzebuje przed godziną 12.00 dnia 22.12.2003


Wszystkie czasy w strefie CET. Aktualna godzina: 07:23.

Powered by vBulletin® Version 3.9.0 LTS
Copyright ©2000 - 2026, vBulletin Solutions Inc.