afisarea cmmdc in fisier

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 (rapid application development).

afisarea cmmdc in fisier

Postby nutzu2010 » 04 Jun 2010, 18:19

buna ziua ! ma puteti ajuta cu urmatoarea problema?

Se consideră subprogramul CMMDC care primeşte prin cei doi parametri, x şi y, două
numere naturale (1≤x≤10000, 1≤y≤10000) şi returnează cel mai mare divizor comun al lor.
a) Scrieţi numai antetul subprogramului CMMDC. (4p.)
b ) Fişierul text NUMERE.IN conţine, pe fiecare linie, câte două numere naturale nenule mai
mici sau egale decât 10000, despărţite printr-un spaţiu, reprezentând numitorul şi
numărătorul câte unei fracţii. Scrieţi un program PASCAL care, pentru fiecare linie k din
fişierul NUMERE.IN, citeşte numitorul şi numărătorul fracţiei de pe această linie şi scrie în
fişierul text NUMERE.OUT , tot pe linia k, numitorul şi numărătorul acestei fracţii, adusă la
forma ireductibilă, ca în exemplu. Se vor utiliza apeluri apeluri utile ale subprogramului
CMMDC. (6p.)
Exemplu: dacă fişierul
NUMERE.IN are conţinutul
alăturat:
12 14
11 12
2 2
4 8
atunci fişierul
NUMERE.OUT va avea
următorul conţinut:
6 7
11 12
1 1
1 2

la punctul a) ce inseamna antetul subprogramului?
doar asta?:
  1. function cmmdc(x.y:integer):integer;


la punctul b. ar putea fi ceva de genu'?

  1. program calcul;
  2. var fin,fout:text;
  3.      x,y:integer;
  4. function cmmdc(a,b:integer):integer;
  5. var r:integer;
  6. begin
  7. r:=0;
  8. repeat
  9. r:=a mod b;
  10. a:=b;
  11. r:=b;
  12. until r=0;
  13. cmmdc:=a;
  14. end;
  15. begin
  16. assign(fin,'numere.in');
  17. reset(fin);
  18. assign(fout,'numere.out');
  19. rewrite(fout);
  20. while (not eof(fin)) do
  21. begin
  22. while not eoln(fin) do
  23. begin
  24. readln(fin,x,y);
  25. writeln(fout,cmmdc(x,y));
  26. end;
  27. end;
  28. close(fin);
  29. close(fout);
  30. end.

0,0 points / 0 votes
nutzu2010
Bit
 
Joined: 27 Feb 2010
Points: 0

Re: afisarea cmmdc in fisier

Postby emi » 04 Jun 2010, 20:10

Am aranjat putin codul, poate acum e mai vizibil.

cmmdc este o functie declarata in program.
Poti declara functii ajutatoare pe care le apelezi in programul principal.
La primul punct, (probabil) iti cere sa scrii functia cmmdc in pascal sau pseudocod.

  1. program calcul;
  2. var
  3.     fin, fout: text;
  4.     x, y, c: integer;
  5.  
  6. function cmmdc(a, b: integer): integer;  { cerinta a >= b }
  7. var
  8.     r: integer;
  9. begin
  10.     repeat
  11.         r := a mod b;  { folosim proprietatea: cmmdc(a,b) = cmmdc(b, a mod b) si cmmdc(a,0) = a  }
  12.         a := b;
  13.         b := r;  { corectat }
  14.     until r = 0;
  15.  
  16.     cmmdc := a;
  17. end;  { sfirsit functie cmmdc }
  18.  
  19. begin
  20.     assign(fin, 'numere.in');
  21.     reset(fin);
  22.     assign(fout, 'numere.out');
  23.     rewrite(fout);
  24.  
  25.     while (not eof(fin)) do begin
  26.         readln(fin, x, y);  { sunt 2 numere pe linie, trece automat la linia urmatoare }
  27.         c := cmmdc(x, y);
  28.         writeln(fout, x div c, ' ', y div c);  { afisam termenii fractiei in forma ireductibila }
  29.     end;
  30.  
  31.     close(fin);
  32.     close(fout);
  33. end.

0,0 points / 0 votes
Last edited by emi on 04 Jun 2010, 19:37, edited 1 time in total.
emi
Byte
 
Joined: 10 Apr 2010
Points: 15

Re: afisarea cmmdc in fisier

Postby Adrian » 04 Jun 2010, 23:18

@nutzu

Ca sa fiu in ton cu moda nationala ca pentru fiecare parere existenta sa fie una care nu e de-acord... :D

Cred ca la punctul (1), antetul functiei, ajunge ce ai specificat tu. In majoritatea limbajelor de programare antetul functiei consta in informatiile de nume, tip returnat si lista de variabile. Restul detaliilor sunt omise. Si cam atat ar trebui sa cuprinda un antet - ca sa intelegi mai bine, antetul reprezinta un "contract" intre tine si compilator - tu ii spui cum va fi folosita functia respectiva in restul programului. Cand nu-ti respecti partea ta de contract, compilatorul striga :D si asa poti descoperi pe unde ai gresit cate ceva in cod.

Despre punctul (2) nu stiu ce sa-ti zic... sincer, pare ok codul cu mici modificari (vezi ce ti-a mai adaugat emi pe-acolo, cum ar veni greseala din functia cmmdc) dar cel mai simplu e sa faci tu un fisier de intrare de test si sa vezi daca functioneaza, nu? ;)

0,0 points / 0 votes
Adrian
Bit
 
Joined: 04 May 2010
Points: 3

Re: afisarea cmmdc in fisier

Postby emi » 05 Jun 2010, 00:00

Adrian, sa fim seriosi, daca ai fi prof de info ai fi multumit cu o linie in care scrie cmmdc ?
Si la punctul 2 te invit sa testezi codul, daca afiseaza ce se spune in enunt.
Numere.in

0,0 points / 0 votes
emi
Byte
 
Joined: 10 Apr 2010
Points: 15

Re: afisarea cmmdc in fisier

Postby Adrian » 05 Jun 2010, 15:40

1) Depinde de nivelul la care se cere, de elevi, etc etc... de exemplu la clasa a 9-a, cu niste elevi care nu au nicio taina cu domeniul asta si cu un profesor care vrea sa-i treaca, punctul (1) + doua linii de la punctul (2) ar cam ajunge pentru nota 5... si stiu ca pare uimitor dar DA, asta e nivelul la noi in tara...
2) Nu o sa-l testez niciodata, ultimul lucru pe care o sa-l fac e sa rezolv altuia temele pentru casa sau subiectele pentru lucrari. Omul a intrebat daca e ok ce a scris, eu am zis ca orientativ e ok dar sa tina cont de specificatiile tale si sa TESTEZE pentru ca daca in loc sa puna el mana la lucru stam noi sa-i rezolvam problemele aici nu va invata niciodata nimic decat ca poate sa intre din cand in cand pe bitcell si sa gaseasca pe cineva care sa-i faca temele... si spre deosebire de "tocilarul" clasei, asta nu trebuie convins / amenintat / platit cum se mai practica pe la noi prin scoli. Nu e de datoria mea sa-i rezolv temele... chiar nu am facut mai mult decat sa citesc fiecare bucata de cod in 20-30 de secunde... si nici nu ma intereseaza daca e ceva gresit acolo, chiar nu voiam mai mult decat sa-i confirm ca arata ca o solutie pentru problema asta si nu pentru turnurile din hanoi... de-acolo e treaba lui sa-si instaleze tot ce ii trebuie...

0,0 points / 0 votes
Adrian
Bit
 
Joined: 04 May 2010
Points: 3

Re: afisarea cmmdc in fisier

Postby nutzu2010 » 05 Jun 2010, 19:24

mai am inca o problema;
Se citeşte de pe prima linie a fişierului text numere.in un număr natural n (0<n<10000) şi,
de pe a doua linie a fişierului, n numere naturale din intervalul [1,100] şi se cere să se
afişeze pe ecran, despărţite prin câte un spaţiu, numărul sau numerele întregi din intervalul
[1,100] care nu apar printre numerele citite. Dacă pe a doua linie a fişierului apar toate
numerele din intervalul precizat, se va afişa mesajul NU LIPSESTE NICIUN NUMAR.
Alegeţi un algoritm de rezolvare eficient din punctul de vedere al timpului de executare.
Exemplu: pentru fişierul numere.in cu următorul conţinut
12
4 2 3 1 6 5 7 8 9 11 10 100
se vor afişa valorile 12 13 … 99 (nu neapărat în această ordine).
a) Explicaţi în limbaj natural metoda utilizată, justificând eficienţa acesteia (4-6 rânduri) (4p.)
b) Scrieţi programul Pascal ce rezolvă problema enunţată, corespunzător metodei
descrise la punctul a). (6p.)

la punctul b. nu stiu ce condtie sa pun...ma puteti ajuta?
  1.  
  2. program calcul;
  3. type sir=array[1..100] of integer;
  4. var f:text;
  5. i:integer;
  6. begin
  7. assign(f,'numere.in');
  8. reset(f);
  9. read(f,n);
  10. for i:=1 to n do read(f,a[i]);
  11. close(f);
  12. for i:=1 to n do
  13. for j:=1 to 100 do
  14. if a[i]<>j then ????
  15.  
  16.  
  17.  

0,0 points / 0 votes
nutzu2010
Bit
 
Joined: 27 Feb 2010
Points: 0

Re: afisarea cmmdc in fisier

Postby smith » 05 Jun 2010, 19:52

Ok. Sper ca ai citit mai sus cum ca forumul nu iti rezolva temele. Noi doar te AJUTAM sa o faci. Sper ca ai citit si regulamentul.

Tu ne intrebi direct punctul B)
Eu vreau sa aud ce ai raspuns la punctul A)
Explicaţi în limbaj natural metoda utilizată, justificând eficienţa acesteia (4-6 rânduri) (4p.)


@restul_forumului: nu va ocositi sa ii postati cumva tema gata facuta.

0,0 points / 0 votes
User avatar
smith
Ilea Cristian
 
Joined: 29 Dec 2009
Location: 0xFFF4
Points: 18.5

Re: afisarea cmmdc in fisier

Postby nutzu2010 » 05 Jun 2010, 19:54

punctul a) nu l-am facut...eu ma chinui sa fac punctul b
si nu trebuie sa-mi rezolvati tema(eu ma pregatesc pentru bac)...asa ca nu ma ajuta cu nimic daca mi le "rezolvati voi"...eu vreau doar sa inteleg.

0,0 points / 0 votes
nutzu2010
Bit
 
Joined: 27 Feb 2010
Points: 0

Re: afisarea cmmdc in fisier

Postby smith » 05 Jun 2010, 19:56

Pai punctul B se rezolva cu punctul A. Zi-mi punctul A si iti zic daca e bine sau nu. Apoi continuam.

0,0 points / 0 votes
User avatar
smith
Ilea Cristian
 
Joined: 29 Dec 2009
Location: 0xFFF4
Points: 18.5

Re: afisarea cmmdc in fisier

Postby nutzu2010 » 05 Jun 2010, 20:01

pai daca nu stiu punctul b ,nu stiu nici punctul a
ce stiu am scriu mai sus...ar trebui sa facem un nou vector cu elementele sortate?

0,0 points / 0 votes
nutzu2010
Bit
 
Joined: 27 Feb 2010
Points: 0

Re: afisarea cmmdc in fisier

Postby smith » 05 Jun 2010, 20:20

b) Scrieţi programul Pascal ce rezolvă problema enunţată, corespunzător metodei
descrise la punctul a)

DECI. Daca stii a) faci si b). NU INVERS. Eu vreau sa vad cum ai gandit, asta daca nu te-ai prins pana acuma ce vreau.

0,0 points / 0 votes
User avatar
smith
Ilea Cristian
 
Joined: 29 Dec 2009
Location: 0xFFF4
Points: 18.5

Re: afisarea cmmdc in fisier

Postby nutzu2010 » 05 Jun 2010, 20:53

pai da ....si eu zic ca ar trebuie sa citim toate numere din fisier(pe rand) ,le bagam intr-un sir a...
dupa care ordonam sirul a ,creeand un sir b si verificam pe rand daca b[i]=i altfel write(i)
dar cred ca nu e bine nici asa...

0,0 points / 0 votes
nutzu2010
Bit
 
Joined: 27 Feb 2010
Points: 0

Re: afisarea cmmdc in fisier

Postby emi » 05 Jun 2010, 21:08

nutzu2010: Salut.
Ai pus o alta problema pe acelasi topic (ti se pare ok ?).

Ca regula generala: ceri ajutor cind ai deja o solutie partiala, sa arati ca ai muncit la problema.
Cind ceri ajutor: descrie problema cit mai bine in titlul subiectului pe care il postezi.
De exemplu: Ajutor problema pentru BAC nr.2

Fara suparare, dar pina nu arati ca ai facut ceva, nu iti va face nimeni tema.

0,0 points / 0 votes
emi
Byte
 
Joined: 10 Apr 2010
Points: 15

Re: afisarea cmmdc in fisier

Postby Adrian » 05 Jun 2010, 21:36

ca sa il completez pe emi care a venit cu o observatie foarte buna, poti de exemplu sa pui numele subiectului propus (daca e de pe lista MEC - mai exista probleme propuse, nu? :-s ) si in felul acesta va fi mai usor si pentru altii care au intrebari referitoare la tema asta... sau titlul cartii, subiectul nu stiu cat, sau asa... si va fi mai usor pentru toti cei care vor naviga

0,0 points / 0 votes
Adrian
Bit
 
Joined: 04 May 2010
Points: 3

Re: afisarea cmmdc in fisier

Postby smith » 05 Jun 2010, 22:49

nutzu2010 wrote:pai da ....si eu zic ca ar trebuie sa citim toate numere din fisier(pe rand) ,le bagam intr-un sir a...
dupa care ordonam sirul a ,creeand un sir b si verificam pe rand daca b[i]=i altfel write(i)
dar cred ca nu e bine nici asa...



Bun, vad ca esti pe aproape. Inca o chestie: Cum sortezi vectorul? Si de ce mai faci un vector b? De ce nu bagi elementele din fisier direct in a, pe pozitiile care trebe?

0,0 points / 0 votes
User avatar
smith
Ilea Cristian
 
Joined: 29 Dec 2009
Location: 0xFFF4
Points: 18.5

Re: afisarea cmmdc in fisier

Postby nutzu2010 » 06 Jun 2010, 11:17

pai ca sa-l sortez ne trebuie o variabila boolean(o sa o numesc sortat )care o sa iau valoarea true cand este sortat...
  1.  
  2. while sortat do
  3. begin
  4. sortat:=false;
  5. for i:=1 to n do
  6. if a[i]>a[i+1] then begin
  7.                             aux:=a[i];
  8.                             a[i]:=a[i+1];
  9.                             a[i+1]:=aux;
  10.                             sortat:=true;
  11.                             end;
  12. end;
  13.  

cred ca asa ar trebui sa fie

0,0 points / 0 votes
nutzu2010
Bit
 
Joined: 27 Feb 2010
Points: 0

Re: afisarea cmmdc in fisier

Postby andreiandreiq » 06 Jun 2010, 12:23

Un alt mod de a face sortare, poate te ajuta:

  1. begin
  2.    repeat
  3.    sortat:=true;
  4.    for i:=1 to n-1 do
  5.         if a[i]>a[i+1]  then
  6.             begin
  7.               sortat:=false;
  8.               aux:=a[i];
  9.               a[i]:=a[i+1];
  10.               a[i+1]:=aux;
  11.             end;
  12.    until sortat=true;
  13.    writeln('Sortare terminata');
  14. end;

0,0 points / 0 votes
Image
andreiandreiq
Word
 
Joined: 30 Dec 2009
Points: 30.33

Re: afisarea cmmdc in fisier

Postby Adrian » 06 Jun 2010, 13:57

nutzu2010 wrote:pai ca sa-l sortez ne trebuie o variabila boolean(o sa o numesc sortat )care o sa iau valoarea true cand este sortat...
  1.  
  2. while sortat do
  3. begin
  4. sortat:=false;
  5. for i:=1 to n do
  6. if a[i]>a[i+1] then begin
  7.                             aux:=a[i];
  8.                             a[i]:=a[i+1];
  9.                             a[i+1]:=aux;
  10.                             sortat:=true;
  11.                             end;
  12. end;
  13.  

cred ca asa ar trebui sa fie


Cred ca mai degraba in algoritmul tau sortat inseamna nesortat... sa-ti explic:
initial va trebui sa ai sortat = true pentru a intra in bucla while ceea ce inseamna ca vectorul tau e sortat cand de fapt nu ar trebui sa fie :)
Intram in while si spunem ca vectorul e nesortat (sortat := false) iar in momentul cand am gasit doua valori consecutive in dezordine le sortam si fixam sortat := true ceea ce nu e adevarat pentru ca sortat e false, vectorul nu e inca 100% sortat. Pentru a functiona dupa cum ai spus tu, ca sortat sa fie true cand vectorul tau e sortat ai avea:

  1.  
  2. sortat := false;    {pentru a intra in bucla for}
  3. while (NOT sortat) do
  4. begin
  5. sortat:=true;    {presupunem ca vectorul e sortat}
  6. for i:=1 to n do
  7. if a[i]>a[i+1] then begin
  8.                             aux:=a[i];
  9.                             a[i]:=a[i+1];
  10.                             a[i+1]:=aux;
  11.                             sortat:=false;    {Daca s-a efectuat interschimbarea intre a[k] si a[k+1] exista posibilitatea ca a[k+1] sa fie mai
  12.                                                       mic si decat a[k - 1] si nu putem fi siguri ca vectorul e inca sortat; mai programam un for}
  13.                             end;
  14. end;
  15.  


Codul tau era functional dar nu ai inteles bine functionalitatea... incearca si tu sa parcurgi programul logic, pas cu pas, cum ti-am povestit eu mai inainte... pentru ca altfel numai reproduci cod invatat la scoala si nu prea inveti mare lucru...

0,0 points / 0 votes
Adrian
Bit
 
Joined: 04 May 2010
Points: 3

Re: afisarea cmmdc in fisier

Postby DarkByte » 06 Jun 2010, 13:59

nutzu2010 wrote:pai ca sa-l sortez ne trebuie o variabila boolean(o sa o numesc sortat )care o sa iau valoarea true cand este sortat...
  1.  
  2. while sortat do
  3. begin
  4. sortat:=false;
  5. for i:=1 to n do
  6. if a[i]>a[i+1] then begin
  7.                             aux:=a[i];
  8.                             a[i]:=a[i+1];
  9.                             a[i+1]:=aux;
  10.                             sortat:=true;
  11.                             end;
  12. end;
  13.  

cred ca asa ar trebui sa fie


Nu cred ca ai inteles ce face variabila aia acolo, care este rostul ei. Cred ca ai auzit, de pe cine stie unde, de o variabila ...

Incearca sa gandesti ceea ce programezi. In plus, in loc sa ne intrebi daca ar merge, ar fi mai bine sa bagi codul intr-un compilator si sa vezi. Nu suntem compilatoare, chiar daca uneori dam impresia asta. Pe noi ne intrebi doar in cazul in care ai o bucata de cod si compilatorul nu te ajuta. Altfel spus, apuca-te si da-ti putin interesul ... nu pentru noi inveti.

L.E. adrian a fost nitel mai grabit decat mine :)

0,0 points / 0 votes
Image
User avatar
DarkByte
DWord
 
Joined: 29 Dec 2009
Points: 78

Re: afisarea cmmdc in fisier

Postby smith » 06 Jun 2010, 14:19

@ Nutu: Eu nu la tipul asta de sortare ma refeream.
Totusi, dupa ce sortezi cum ai zis tu... ce trebuie sa faci in continuare?

Citeste asta. http://en.wikipedia.org/wiki/Counting_sort
Poate ca o sa iti pice fisa.

0,0 points / 0 votes
User avatar
smith
Ilea Cristian
 
Joined: 29 Dec 2009
Location: 0xFFF4
Points: 18.5

Next

Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests