Ajutor In Pascal (problema De Liceu) |
Bine ati venit ca musafir! ( Logare | Inregistrare )
Ajutor In Pascal (problema De Liceu) |
21 Apr 2008, 07:34 PM
Mesaj
#1
|
|
Musteriu Grup: Musterii Mesaje: 4 Inscris: 21 April 08 Forumist Nr.: 11.524 |
Buna seara.
"Se introduce un sir de n numere intregi, de la tastatura. Sa se afiseze: a)maximul dintre numerele negative b)minimul dintre numerele negative c)maximul dintre numerele pozitive d)minimul dintre numerele pozitive." As aprecia daca vreunul mi-ar putea rezolva aceasta problema, dar cu explicatiile de rigoare. Multumesc anticipat. |
|
|
21 Apr 2008, 09:26 PM
Mesaj
#2
|
|
Domnitor Grup: Membri Mesaje: 4.405 Inscris: 16 May 04 Din: Bucuresti, the belly of heck Forumist Nr.: 3.508 |
Cand ai un sir de numere, ca sa le ordonezi crescator:
compari numerele intre ele (vecinele din sir) doua cate doua si verifici daca n < n+1. Daca e treci mai departe, daca nu inversezi n cu n+1. Cand ajungi la sfarsitul sirului repeti operatiunea cu sirul modificat, pana cand nu mai gasesti nici o pereche care sa fie invers decat conditia. Acuma ca stii sa ordonezi siruri de numere, in ordinea crescatoare compari toate numerele cu 0. Alea care sunt mai mici sunt negativele si alea care sunt mai mari sunt pozitivele. Alegi apoi ultimul numar negativ gasit, primul numar negativ gasit, primul numar pozitiv gasit si ultimul numar pozitiv gasit si ai cam toate valorile cautate. Sintaxa si alcatuirea nu stau sa ti-o povestesc, dar presupun ca o poti face si singur. -------------------- |
|
|
21 Apr 2008, 09:49 PM
Mesaj
#3
|
|
Musteriu Grup: Musterii Mesaje: 4 Inscris: 21 April 08 Forumist Nr.: 11.524 |
Cand ai un sir de numere, ca sa le ordonezi crescator: compari numerele intre ele (vecinele din sir) doua cate doua si verifici daca n < n+1. Daca e treci mai departe, daca nu inversezi n cu n+1. Cand ajungi la sfarsitul sirului repeti operatiunea cu sirul modificat, pana cand nu mai gasesti nici o pereche care sa fie invers decat conditia. Acuma ca stii sa ordonezi siruri de numere, in ordinea crescatoare compari toate numerele cu 0. Alea care sunt mai mici sunt negativele si alea care sunt mai mari sunt pozitivele. Alegi apoi ultimul numar negativ gasit, primul numar negativ gasit, primul numar pozitiv gasit si ultimul numar pozitiv gasit si ai cam toate valorile cautate. Sintaxa si alcatuirea nu stau sa ti-o povestesc, dar presupun ca o poti face si singur. Ei bine, chiar de aceea am postat aici. Sorry, dar habar nu (mai) am de Pascal. Am lucrat foarte demult in el. Solutia la problema aceasta i-ar trebui verisorului meu pe maine dimineata. Macar raspunsurile... |
|
|
Promo Contextual |
21 Apr 2008, 09:49 PM
Mesaj
#
|
ContextuALL |
|
|
|
22 Apr 2008, 09:14 AM
Mesaj
#4
|
|
Domnitor Grup: Membri Mesaje: 4.405 Inscris: 16 May 04 Din: Bucuresti, the belly of heck Forumist Nr.: 3.508 |
Pascal nu stiu, adica stiu programare in general, am lucrat cu C si Fortran, ma descurc, dar nu stiu exact sintaxa la pascal.
ordonarea unui sir "a" se face asa, in c (nu folosesc comanda for ca intra mai rau in ceata) while(b!=1) do{ while (i<=n) do { b=0; if (a[i]>a[i+1]) {k=a[i+1]; a[i+1]=a[i]; a[i]=k; b=1;} i=i+1; } } programul inverseaza elementele alaturate pana cand toate sunt in ordine crescaotare. Daca gaseste o pereche prost pusa, o inverseaza si variabila b devine 1, astfel incat la sfarsitul primei bucle while programul stie ca mai trebuie parcursa odata bucla interioara. -------------------- |
|
|
22 Apr 2008, 09:40 AM
Mesaj
#5
|
|
Domnitor Grup: Membri Mesaje: 6.255 Inscris: 3 October 03 Forumist Nr.: 899 |
Setezi b gresit.
In plus, sortezi doar ca sa aflii minime si maxime? Acest topic a fost editat de axel: 22 Apr 2008, 09:41 AM -------------------- Azi avem.
|
|
|
22 Apr 2008, 10:26 AM
Mesaj
#6
|
|
Domnitor Grup: Membri Mesaje: 4.405 Inscris: 16 May 04 Din: Bucuresti, the belly of heck Forumist Nr.: 3.508 |
De fapt ar trebui ca de fiecare data cand face o inversare sa sorteze iar de la inceput sirul. Mai sigur asa, si atunci elimin b complet. De obicei foloseam for pentru chestii de genul asta, spartul in do si while nu mi-a placut niciodata.
Pai sigur ca e mai usor sa sortez. Ca vrea minime si maxime dintre negative si pozitive, si asta mi se pare calea cea mai scurta. Plus ca poti sa mai adaugi si alte cerinte dupa, daca ai chef. -------------------- |
|
|
22 Apr 2008, 11:04 AM
Mesaj
#7
|
|
Domnitor Grup: Membri Mesaje: 6.255 Inscris: 3 October 03 Forumist Nr.: 899 |
Cu sortare, daca faci bine, iese un algoritm O(n log n). Dar ai bagat bubble sort, si asa ca e O(n^2).
Cu o simpla parcurgere a sirului (cu niste if-uri), iese O(n). Si e si mai simplu: nu trebuie sa stii algoritmi de sortare. Oricum, si cu sir sortat, tot trebuie iterat (sau cautat binar). Ca ai conditiile acelea cu negativ/pozitiv. Acest topic a fost editat de axel: 22 Apr 2008, 11:05 AM -------------------- Azi avem.
|
|
|
22 Apr 2008, 03:10 PM
Mesaj
#8
|
|
Musteriu Grup: Musterii Mesaje: 4 Inscris: 21 April 08 Forumist Nr.: 11.524 |
|
|
|
22 Apr 2008, 04:44 PM
Mesaj
#9
|
|
Domnitor Grup: Membri Mesaje: 4.405 Inscris: 16 May 04 Din: Bucuresti, the belly of heck Forumist Nr.: 3.508 |
Ok, uite cum vine:
input: citesti numerel si le bagi in sir. CODE procesare:
i=0 while(i<=n) { <span class="postcolor">i=i+1;</span> <span class="postcolor">if (a[i]>a[i+1]) { k=a[i+1]; a[i+1]=a[i]; a[i]=k; i=1} //sau 0, depinde de unde incep sirurile in pascal } </span><span class="postcolor">//Practic ori de cate ori gaseste o pereche inversata o ia de la inceput. Cand nici o pereche nu mai e inversata se iese din bucla.</span> <span class="postcolor">afisare: pentru cel ami mic numar negative: //folosesc comanda cout, da nu stiu cum are pasca? write? whatever if (a[1]<0) write a[1]; else write "nu exista numar"; // primul numar, si cel mai mic, va fi primul din sir dupa ordonare. Daca nu e negativ, normal ca nu il afisam // cel mai mare numar negativ: while(i<=n) {if (a[i]<0) i=i+1; else {write a[i-1]; break;} //practic verifica daca numerele sunt mai mici ca 0 pe rand. Cand ajunge la un numar ami mare, afiseaza //numarul precedent, care era evident mai mic ca zero, dar cel mai mare dintre negative, si iese din bucla.. } </span><span class="postcolor">while(i<=n) {if (a[i]<0) i=i+1; else {write a[i]; break;} // la fel ca mai sus, doar ca intoarce prima valoare pozitiva gasita. Evident ca aia va fi cea mai mica val pozitiva } </span> <span class="postcolor">write a[n]; //cel mai mare numar din sir </span> Acest topic a fost editat de Blakut: 22 Apr 2008, 04:45 PM -------------------- |
|
|
22 Apr 2008, 04:46 PM
Mesaj
#10
|
|
Domnitor Grup: Membri Mesaje: 4.405 Inscris: 16 May 04 Din: Bucuresti, the belly of heck Forumist Nr.: 3.508 |
Ok, uite cum vine:
input: citesti numerel si le bagi in sir. procesare: i=0 while(i<=n) { i=i+1; if (a[i]>a[i+1]) { k=a[i+1]; a[i+1]=a[i]; a[i]=k; i=1} //sau 0, depinde de unde incep sirurile in pascal } //Practic ori de cate ori gaseste o pereche inversata o ia de la inceput. Cand nici o pereche nu mai e inversata se iese din bucla. afisare: pentru cel ami mic numar negative: //folosesc comanda cout, da nu stiu cum are pasca? write? whatever if (a[1]<0) write a[1]; else write "nu exista numar"; // primul numar, si cel mai mic, va fi primul din sir dupa ordonare. Daca nu e negativ, normal ca nu il afisam // cel mai mare numar negativ: while(i<=n) {if (a[i]<0) i=i+1; else {write a[i-1]; break;} //practic verifica daca numerele sunt mai mici ca 0 pe rand. Cand ajunge la un numar ami mare, afiseaza //numarul precedent, care era evident mai mic ca zero, dar cel mai mare dintre negative, si iese din bucla.. } while(i<=n) {if (a[i]<0) i=i+1; else {write a[i]; break;} // la fel ca mai sus, doar ca intoarce prima valoare pozitiva gasita. Evident ca aia va fi cea mai mica val pozitiva } write a[n]; //cel mai mare numar din sir -------------------- |
|
|
26 Apr 2008, 08:44 PM
Mesaj
#11
|
|
Musteriu Grup: Musterii Mesaje: 4 Inscris: 21 April 08 Forumist Nr.: 11.524 |
Multumesc frumos. Se poate topic closed. Sarbatori Fericite!
|
|
|
Versiune Text-Only | Data este acum: 1 November 2024 - 01:49 AM |