Documente Academic
Documente Profesional
Documente Cultură
Impartirea in module
Programele mai mari de vor imparti in module (codul impartit pe: blocuri de program, functii,
fisiere, etc), pt a fi mai usor de gestionat si pt a putea fi prelucrate separat (poate chiar in
paralel).
Programul cu minimul este un program simplu dar, pentru a demonstra principiul, l-am putea
imparti in module astfel:
Citirea numerelor
Parcurgerea tabloului, cu aflarea minimului
Afisarea minimului
Algoritmul problemei in limbaj natural Varianta 1
Foarte important: Pentru o problema nu exista un singur algoritm corect!!!
Se introduc pe rand numerele si se memoreaza intr-un tablou. Se parcurge tabloul si pt fiecare
element se verifica daca e mai mic decat min (initializat cu primul numar cu INT_MAX), daca
da, valoarea luni va fi noua val a lui min.
Scheme logice
La adresa de mai jos gasiti un tabel cu blocurile folosite intr-o schema logica.
http://www.cs.utt.ro/~cami/upc/scheme/scheme-logice.htm
Pseudocod (exemplu)
integer tab_nr[100], i=0, min=INT_MAX
citeste tab_nr[i]
while (avem numere and i<100) se lasa sa se defineasca la implementare ce inseamna asta
| if ( 0<tab_nr[i] < 167 000 )
|
i=i+1;
| else
|
write ("Numar incorect, introdu din nou")
|
sari inapoi la linia de inceput a ciclului
|_ citeste (tab_nr[i])
for (i : 0-> n-1)
| if (tab_nr[i] < min )
|_
min = tab_nr[i]
write (min)
Implementare Step Wise Refinement Programare Descendenta
1. Se scrie functia principala (main), cu apelul catre principalele functii ce urmeaza a fi definite.
Se descriu structurile de date (declaratiile de variabile, constante, etc). Functiile se definesc la
modul generic (scrii numele functiei, eventual parametrii cu care se apeleaza, si in rest
comentarii).
2. Se dezvolta functiile apelate in main. Daca se constata ca si in aceste functii se poate lucra
modular, se repeta pasul 1: se scriu aici apeluri de noi functii care apoi vor fi definite detaliat.
- sa cititi lat2 si lat3 cu mesaje de dialog cu utilizatorul si cu validare: printati mesaje inainte
de citiri (Introduceti variabila x:) si verificati ca numerele sa fie intr-adevar >0; daca nu sunt,
atunci afisati un mesaj de eroare si iesiti din main cu un apel return EXIT_FAILURE ).
- daca numerele sunt corecte, sa se calculeze diagonala mare a paralelipipedului (puteti
folosi x*x sau functia pow(x,y) ce calculeaza x^y), aria laterala, aria bazei, volumul
3. Sa se afieze calculeze si afieze modulul unui numar a citit de la tastatura (echivalent cu
apelul abs(a)) si daca a este par sau impar (folosii operatorul % astfel: a%b = restul impartirii lui
a la b).
4. Se da programul urmator care calculeaza minimul a 2 numere reale:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float a=5, b=7;
printf(Minimul este );
if (a<b)
printf(%d, a);
else
printf(%d, b);
return EXIT_SUCCESS;
}
Sa se modifice programul astfel incat sa calculeze si sa afieze minimul a 3 numere reale:
Daca a<b atunci
Daca a<c atunci
min:=a
Altfel min:=c
Altfel
Daca b<c
Daca a<b
Interschimba a cu b
Daca b<c
Interschimba b cu c
Daca a<b
Interschimba a cu b
Tipareste a,b,c
(unde o interschimbare a<->b se face prin a<=aux; aux:=b; b:=aux; aux este o variabila)
4. Se da un unghi in secunde. Sa se transforme in grade, minute si secunde.
5. Se introduc de la tastatura n numere naturale. Precizai numerele care au suma cifrelor
egala cu numrul de ordine pe care l-au avut la citire.
6. Verificai daca un nr. este palindrom.
7. Se citete un numr ntreg n. Se citesc apoi numere reale care se nsumeaz. Citirea se
oprete cnd suma este >=n. Sa se afieze cate numere au fost citite si suma lor.
8. Sa se determine catul si restul impartirii a doua numere naturale folosind procedeul de
scdere repetata a impartitorului.
9. Sa se citeasc un numr n si sa se calculeze expresia -1*2+2*3-+n*(n+1).
10. Se citesc succesiv numere pozitive de la tastatura, pana se citeste un numar negativ. Sa
se afiseze cate numere s-au citit. Sa se determine minimul lor.