Sunteți pe pagina 1din 5

LAB3. Etapele de Rezolvare a unui Program. Pseudocod. Scheme Logice . Introducere in C.

I. Etapele de Rezolvare a unui Program


Etapele realizrii unui program
1. Definirea problemei n limbajul domeniului de care apartine.
2. Specificarea principalelor date si structuri de date necesare.
3. Organizarea modular si ierarhic a solutiei problemei.
4. Elaborarea algoritmului problemei. Alegerea modelelor matematice si a metodelor de calcul
necesare. (limbaj natural, schema logica, pseudocod)
5. Implementarea (codificarea in limbajul C, C++, Pascal, Java, etc).
6. Translatarea (compilarea) programului. (cu gcc, DevC++, etc).
7. Validarea rezultatelor (rulezi programul pentru cateva date triviale ca sa vezi ca merge).
8. Elaborarea documentatiei (ai terminat programul faci o descriere a lui)
9. Rularea programului cu date reale. (rulezi programul pentru date de valori mari, din practica)
10. ntretinerea programului. (corecturi datorita erorilor minore semnalate, datorita modificarii
cerintelor, etc)
Definirea problemei
Primim un set de specificatii (cerinte) de la client. Trebuie sa ne asiguram ca cerinta este complet
specificata (cerinte functionale cat si nefunctionale : constrangeri de timp-cat de repede sa
functioneze programul, de spatiu cata memorie avem la dispozitie pentru program, etc..)
Cerinta :
Sa se gaseasca cel mai mic numar dintr-un set de numere dat.
Se cauta sa se rafineze aceasta cerinta, punandu-ne intrebari despre :
- domeniul setului (cat de mare e setul, cate numere max poate contine?) max 100
- domeniul numerelor (tipul intervalul din care fac parte,.. ) intregi, 0 167 000
- cerinte nonfunctionale (incadrare in timp, securitate, daca e cazul, viteza, ..)
- de unde luam datele si unde punem rezultatele (fisier, tastatura,..), interfata grafica,..
- ....
Specificarea principalelor date si structuri de date necesare
Se cauta sa se defineasca structurile de date care sunt prelucrate pentru rezolvarea problemei. Nu
ne intereseaza structuri de date auxiliare cum ar fi un contor, sau chiar o variabila auxiliara de
tipul prelucrat, folosita pentru interschimbarea a 2 variabile. In acest moment noi nu stim
algoritmul problemei, deci nu avem cum sa stim aceste variabile auxiliare.
Varianta 1: Pentru problema cu minimul, vom avea un tablou si o variabila pentru minim. Tipul
acestora depinde de decizia luata la definirea problemei.
int tab_nr[100], min;
Varianta 2: O alta abordare pt a rezolva problema ar fi sa citim numerele pe rand in aceeasi
variabila, deoarece nu se cer memorate, doar gasit minimul.
int nr, min;

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.

II. Introducere in Limbajul C. Citiri, Afisari, Instructiuni.


1. Scrieti, compilati si rulati urmatorul program:
#include<stdio.h>
#include<stdlib.h>
int main() //acelasi lucru cu int main(void)
{
printf(Hello World.\nI am Big Brother.\n);
return EXIT_SUCCESS;
/* este acelasi lucru cu return 0; EXIT_SUCCESS este de fapt egal cu 0 pentru ca in
libraria stdlib.h apare la un moment dat #define EXIT_SUCCES 0 */
}
Modificati programul astfel incat sa citeasca o variabila si sa o afiseze astfel:
+***********************+
| Am citit variabila <valoarea variabilei>. |
+***********************+
unde in loc de <valoarea variabilei> se tipareste valoarea citita a variabilei.
2. Se da urmatorul program:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
int lat1,lat2,lat3;
float drum;
lat1=217;
printf(\n\n\n DRUMUL I \n\n);
lungime_drum=sqrt(2.0)*latura;
printf(Drum 1 are lungimea de %f metri, lungime_drum);
return EXIT_SUCCESS;
}
Modificati programul astfel incat:

- 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

IV. Probleme suplimentare


1 . Sa se rezolve ecuaia de gradul I a*x+b=0 cu a,b, reale:
Daca a=0 atunci
Daca b=0 atunci
Tipareste mesaj ecuatie cu o infinitate de solutii
Altfel
Tipareste mesaj ecuatia nu are solutii
Altfel
Calculeaza solutia
Tipareste mesaj solutia este:
Tipareste solutia
2. Sa se rezolve ecuaia de gradul II a*x^2+b*x+c=0.
3. Sa se ordoneze cresctor 3 numere ntregi a,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.

S-ar putea să vă placă și