HanuAncutei.com - ARTA de a conversa!

Bine ati venit ca musafir! ( Logare | Inregistrare )

 
Reply to this topicStart new topic
> Ajutor In Pascal (problema De Liceu)
stained
mesaj 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. smile.gif
Go to the top of the page
 
+Quote Post
Blakut
mesaj 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.


--------------------
Go to the top of the page
 
+Quote Post
stained
mesaj 21 Apr 2008, 09:49 PM
Mesaj #3


Musteriu
*

Grup: Musterii
Mesaje: 4
Inscris: 21 April 08
Forumist Nr.: 11.524



QUOTE(Blakut @ 21 Apr 2008, 10:26 PM) *
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... rolleyes.gif
Go to the top of the page
 
+Quote Post
Promo Contextual
mesaj 21 Apr 2008, 09:49 PM
Mesaj #


ContextuALL









Go to the top of the page
 
Quote Post
Blakut
mesaj 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.


--------------------
Go to the top of the page
 
+Quote Post
axel
mesaj 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? rolleyes.gif

Acest topic a fost editat de axel: 22 Apr 2008, 09:41 AM


--------------------
Azi avem.

Go to the top of the page
 
+Quote Post
Blakut
mesaj 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.


--------------------
Go to the top of the page
 
+Quote Post
axel
mesaj 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.

Go to the top of the page
 
+Quote Post
stained
mesaj 22 Apr 2008, 03:10 PM
Mesaj #8


Musteriu
*

Grup: Musterii
Mesaje: 4
Inscris: 21 April 08
Forumist Nr.: 11.524



QUOTE(axel @ 22 Apr 2008, 10:40 AM) *
In plus, sortezi doar ca sa aflii minime si maxime? rolleyes.gif


Da, cam asta as vrea.
Go to the top of the page
 
+Quote Post
Blakut
mesaj 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


--------------------
Go to the top of the page
 
+Quote Post
Blakut
mesaj 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


--------------------
Go to the top of the page
 
+Quote Post
stained
mesaj 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! rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 



RSS Versiune Text-Only Data este acum: 19 October 2017 - 09:03 AM
Ceaiuri Medicinale Informatii despre Certificat Energetic