Program pascal "mini calculator"

Pascal este un limbaj imperativ, creat inițial pentru a ajuta la predarea noțiunilor de programare structurati studenților. Delphi, urmașul lui Pascal, este un mediu de dezvoltare pentru aplicații Windows. Delphi este primul limbaj de programare (Object Pascal, mai exact) care a îmbinat ușurința în programare a limbajelor de nivel înalt și puterea uneltelor de lucru de nivel scăzut într-un mediu RAD.

Re: Program pascal "mini calculator"

Postby getlow12 » 07 Jul 2011, 11:06

O sa incerc. Deja am o idee, dar nu stiu cat de corecta e si nu prea stiu sa o integrez pentru tot programul (???). Ideea mea e in felul urmator: mai pun o variabila pe un sir array ce contine ASCII pentru toate tastele in afara de cele numerice si apoi If x (fiind var. respctiva) then writeln('Nu ati apasat ceea ce trebuia') else Continue dar sunt in ceata putin. O sa incerc si o sa mai postez pe parcursul zilei.
0,0p / 0 votes
"Hacking is an ART and we are the ARTist"
User avatar
getlow12
Bit
 
Joined: 04 May 2011
Status: 0

Re: Program pascal "mini calculator"

Postby DarkByte » 07 Jul 2011, 11:08

O sa te trimit, din nou, la tutorial :P

Nu vad de ce te-ai complica cu array-uri, cand poti folosi else la structura case.

Spor !
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Program pascal "mini calculator"

Postby getlow12 » 07 Jul 2011, 11:56

Deci DarkByte mersi mult(iar).
  1.   Program Calculator;
  2.    Uses Crt;
  3.  
  4.    var      SEL, a, b: integer;
  5.             YN:char;
  6.  
  7.     begin
  8.        repeat
  9.           Clrscr;
  10.           Writeln('Alegeti operatia corepunzatoare din lista de mai jos: ');
  11.           Writeln('[1]. Adunarea a doua numere');
  12.           Writeln('[2]. Scaderea a doua numere');
  13.             readln(SEL);
  14.             case SEL of
  15.               1:
  16.                 begin
  17.                   writeln('Ati ales adunarea!');
  18.                   writeln('Dati primul nr: ');readln(a);
  19.                   writeln('Dati cel de-al doilea nr: ');readln(b);
  20.                   writeln('Suma celor doua numere este: ',a+b);
  21.                 end;
  22.               2:
  23.                 begin
  24.                   writeln('Ati ales scaderea!');
  25.                   Writeln('Dati primul nr: ');readln(a);
  26.                   writeln('Dati cel de-al doilea nr: ');readln(b);
  27.                   Writeln('Diferenta celor doua numere este: ',a-b);
  28.                 end;
  29.                 Else
  30.                 writeln('Ai facut o alegere invalida');
  31.             end;
  32.  
  33.             Delay(2000);
  34.             Writeln(#13#10 + 'Doriti sa reveniti la meniul initial (Y / N) ?');
  35.             YN := Readkey;
  36.             case YN of
  37.               'y', 'Y':
  38.                 begin
  39.                   writeln('Veti reveni la meniul initial');
  40.                   Delay(1000);
  41.                 end;
  42.               'n', 'N':
  43.                 begin
  44.                   Writeln('Nuuuuuuu.....');
  45.                   Delay(1000);
  46.                   Break;
  47.                 end;
  48.              end;
  49.           until False;
  50.         end.
  51.  
  52.  

Asta e codul pentru cazul in care ai tasta ceva mai mare ca 2. Dupa ce am vazut unde trebuia pus else nu a fost decat o linie scrisa. Dar daca as vrea sa aibe acelasi efect pentru toate tastele inafara de cele doua numerice? Ce ar trebui sa am in vedere cand modific?
0,0p / 0 votes
"Hacking is an ART and we are the ARTist"
User avatar
getlow12
Bit
 
Joined: 04 May 2011
Status: 0

Re: Program pascal "mini calculator"

Postby DarkByte » 07 Jul 2011, 11:59

Problema ta nu e la case, ci e faptul ca optiunea ta (1 sau 2) o citesti intr-o variabila integer. Daca nu primesti cifra la rularea programului, citirea variabilei crapa si ia tot programul dupa ea.

Varianta else de la case se ocupa de toate cazurile de care nu te ocupi tu in mod explicit. Solutia e destul de simpla: modifica prima structura case si adu-o la forma celei de-a doua (care foloseste citire pe caractere - ReadKey, as I said :) ).

Bafta
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Program pascal "mini calculator"

Postby getlow12 » 08 Jul 2011, 14:05

Nu prea imi dau seama cum sa fac ce ai zis, DarkByte. Ma puteti ajuta cu o idee sau un inceput?
0,0p / 0 votes
"Hacking is an ART and we are the ARTist"
User avatar
getlow12
Bit
 
Joined: 04 May 2011
Status: 0

Re: Program pascal "mini calculator"

Postby DarkByte » 08 Jul 2011, 14:13

Avand in vedere ca nu prea mare chestie, nu am ce (alta) idee sa-ti dau, asa ca iti postez codul:
  1. Program Calculator;
  2. Uses Crt;
  3.  
  4. var a, b: integer;
  5.     option: char;
  6.  
  7. begin
  8.   repeat
  9.     Clrscr;
  10.     Writeln('Alegeti operatia corepunzatoare din lista de mai jos: ');
  11.     Writeln('[1]. Adunarea a doua numere');
  12.     Writeln('[2]. Scaderea a doua numere');
  13.  
  14.     option := ReadKey; { citim caracter (Char), nu citim numar (Integer) }
  15.     case option of
  16.       '1':
  17.         begin
  18.           writeln('Ati ales adunarea!');
  19.           writeln('Dati primul nr: ');readln(a);
  20.           writeln('Dati cel de-al doilea nr: ');readln(b);
  21.           writeln('Suma celor doua numere este: ',a+b);
  22.         end;
  23.       '2':
  24.         begin
  25.           writeln('Ati ales scaderea!');
  26.           Writeln('Dati primul nr: ');readln(a);
  27.           writeln('Dati cel de-al doilea nr: ');readln(b);
  28.           Writeln('Diferenta celor doua numere este: ',a-b);
  29.         end;
  30.       else writeln('Ai facut o alegere invalida');
  31.     end;
  32.  
  33.     Delay(2000);
  34.     Writeln(#13#10 + 'Doriti sa reveniti la meniul initial (Y / N) ?');
  35.     option := Readkey;
  36.     case option of
  37.       'y', 'Y', #13: {#13 este Enter}
  38.         begin
  39.           writeln('Veti reveni la meniul initial');
  40.           Delay(1000);
  41.         end;
  42.       'n', 'N', #27: {#27 este Escape}
  43.         begin
  44.           Writeln('Nuuuuuuu.....');
  45.           Delay(1000);
  46.           Break;
  47.         end;
  48.     end;
  49.   until False;
  50. end.


Dupa cum vezi, am redenumit "YN" al tau in "option" si l-am folosit in ambele locuri - si la verificarea daca e adunare sau scadere ... si la continuare sau iesire. Cam asta-i tot ...

Bafta
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Previous

Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests