Вы находитесь на странице: 1из 16

E.

Kalisz - Programarea calculatoarelor

-- 1. 1 --

Etapele rezolvrii unei probleme (1)


Formularea clar a problemei: - date disponibile - prelucrri necesare - rezultate dorite Analiza detaliat: - date: sursa (consol / suport magnetic /), semnificaie, tip (numeric / alfanumeric), restricii asupra valorilor - rezultate: destinaie (ecran / imprimant / suport magnetic /), mod de prezentare - principalele etape de rezolvare (algoritm) - restricii impuse de limbajul de programare

E.Kalisz - Programarea calculatoarelor

-- 1. 2 --

Etapele rezolvrii unei probleme (2)


Elaborarea algoritmului Codificarea algoritmului Program surs Crearea fiierului surs Consola Editor de texte Fiier surs Compilare Fiier surs Compilator Fiier obiect Generarea programului executabil (Fiier obiect + Biblioteci de funcii) Editor de legturi Fiier executabil

Execuie cu date de test

E.Kalisz - Programarea calculatoarelor

-- 1. 3 --

Utilizarea unui mediu de programare


program surs

Editare
Compilare Editare de legturi Execuie

x.c

! salvai pe tot parcursul editarii !


(fiier surs)

x.obj
x.exe rezultate

(fiier obiect)
(fiier executabil)

E.Kalisz - Programarea calculatoarelor

-- 1. 4 --

Prima problema (actualizare)


Actualizarea unei valori ntregi cu un procent dat
- date:

valoare curent (v) procent actualizare (p) - prelucrare: calculul valorii actualizate - rezultat: valoarea calculat (r)

E.Kalisz - Programarea calculatoarelor

-- 1. 5 --

Analiza detaliata act (1)


Date: 2 valori preluate de la consol v - valoare ntreag, strict pozitiv p - valoare real, pozitiv (majorare) sau negativ (diminuare) Rezultat: r - valoare ntreag, strict pozitiv, rotunjit conform specificatiilor i afiat pe ecran (nsoit de un text explicativ) Principalele etape de rezolvare citirea datelor (se presupun corecte) calculul valorii actualizate cu formula v + v * p / 100 sau v * (1 + p / 100) calculul valorii rotunjite, dac este cazul afiarea rezultatului

E.Kalisz - Programarea calculatoarelor

-- 1. 6 --

Analiza detaliata act (2)


Restricii impuse de limbaj

valori ntregi prea mari pentru a fi memorate ca atare scalare (de exemplu valorile de ordinul milioanelor se pot exprima n mii lei) operaiile cu operanzi de tip ntreg au rezultat de tip ntreg pentru a obine rezultat de tip real (cu parte subunitar) cel puin unul dintre operanzi trebuie s fie de tip real conversia de la real la ntreg se realizeaz cu trunchierea prii subunitare eventuala rotunjire trebuie realizat explicit

E.Kalisz - Programarea calculatoarelor

-- 1. 7 --

Limbajul C standard
- face distincie ntre literele mari i literele mici (este case-sensitive)

- cuvintele cheie (rezervate) se scriu cu litere mici


- identificatorii (numele) de variabile, funcii, tipuri definite de programator etc. pot conine litere, caracterul subliniere (_), cifre, dar nu pot ncepe cu cifr; exemple: NumarPozitive, nr_poz, np, n1, x1_1 - comentariile au forma general /* text comentariu */ - apelurile de funcii au forma general nume_functie(lista_parametri_efectivi);

E.Kalisz - Programarea calculatoarelor

-- 1. 8 --

Structura programelor C
/*-- nume.c --*/ /*-- comentariu initial --*/ /*-- directive includere fisiere antet --*/ #include <stdio.h> #include <stdlib.h> #include <conio.h> . . . . . /*-- alte directive --*/ [ definitii si declaratii globale ]

int main() { [ definitii si declaratii locale ] < secventa_instructiuni > return expresie; /* revenire din executie */ }

E.Kalisz - Programarea calculatoarelor

Programul act.c
/*-- act.c -- actualizare intreg --*/ #include <stdio.h> #include <conio.h>

-- 1. 9 --

int main() { long v; /* valoare actualizata */ float p; /* procent actualizare */ double rr; /* rezultat de tip real */ printf("\nvaloare actualizata = "); scanf("%li", &v); /* citeste valoare v */ printf("procent actualizare = "); scanf("%f", &p); /* citeste procent p */ rr = v * (1 + p / 100); /* calcul rezultat rr */ printf("-> %4.2lf\n", rr); printf(" trunchiat = %li\n",(long)rr); printf(" rotunjit = %li\n",(long)(rr+0.5)); getch(); /* pauza: asteapta apasare tasta */ return 0; /* revenire din executie */ }

E.Kalisz - Programarea calculatoarelor

Exemple execuie program


1. valoare actualizata = 2050 procent actualizare = 13 -> 2316.50 trunchiat = 2316 rotunjit = 2317 2. valoare actualizata = 150 procent actualizare = 2.5 -> 153.75 trunchiat = 153 rotunjit = 154

-- 1. 10 --

E.Kalisz - Programarea calculatoarelor

-- 1. 11 --

Model de prelucrare repetat


/*-- simplu.c --*/ #include <stdio.h> #include <conio.h> int main() { int x, y; /* date */ for (;;) /* repeta secventa de prelucrari */ { printf("\nDoi intregi: "); fflush(stdin); /* eliberare zona tampon citire */ if(scanf("%i%i", &x,&y) < 2) /* daca sfarsit date */ break; /* => iesire din bucla */ printf("suma = %i , produs = %i\n", x+y, x*y); } printf("\nSfarsit date\n"); getch(); return 0; }

E.Kalisz - Programarea calculatoarelor

Exemplu execuie simplu.c


Doi intregi: 23 -15 suma = 8 , produs = -345 Doi intregi: 2 3 4 5 suma = 5 , produs = 6

-- 1. 12 --

Doi intregi: -2 -303 suma = -305 , produs = 606 Doi intregi: 1,2
Sfarsit date

E.Kalisz - Programarea calculatoarelor

Programul actm.c
/*-- actm.c actualizari repetate --*/ #include <stdio.h> #include <conio.h>

-- 1. 13 --

int main() { long v = 0; /* valoare actualizata */ double p = 0, rr; /* procent actualizare, rezultat */ for (;;) { printf("\nvaloarea actualizata si procent = "); fflush(stdin); /* eliberare zona tampon citire */ if(scanf("%li%lf", &v, &p) < 1 || (v <= 0)) break; rr = v * (1 + p / 100); printf("\t\tv = %li, p = %4.2lf -> %4.2lf\n", v,p,rr); } printf("\nSfarsit date\n"); getch(); return 0; }

E.Kalisz - Programarea calculatoarelor

-- 1. 14 --

Exemplu execuie actm.c


valoare actualizata si procent = 1100 2.75 v = 1100, p = 2.75 -> 1130.25

valoare actualizata si procent = 1234. v = 1234, p = 2.75 -> 1267.93


valoare actualizata si procent = 1234 .5 100 x v = 1100, p = 0.50 -> 1240.17 valoare actualizata si procent = 1000 -35 v = 1000, p = -35.00 -> 650.00 valoare actualizata si procent = 150v = 150, p = -35.00 -> 97.50 valoare actualizata si procent = . Sfarsit date

E.Kalisz - Programarea calculatoarelor

-- 1. 15 --

Tem
Modificai programul de actualizare a unei secvene de valori (actm.c) astfel nct rotunjirea rezultatului s se realizeze la cel mai apropiat multiplu al unei valori de referin, ref > 1, ntreag, citit de la consol. Exemple: rotunjire la multiplu de 100 2325 2300 2378 2400 rotunjire la multiplu de 50 2324 2300 2325 2350

E.Kalisz - Programarea calculatoarelor

-- 1. 16 --

Structura programelor studenilor


/*-- xxx.c --*/ /*-- 31g CB NUME Prenume --*/ /*-- scurta descriere tema --*/ #include <stdio.h> #include <stdlib.h> #include <conio.h> . . . . . int main() { [ definitii si declaratii locale ] < secventa_instructiuni > return 0; /* revenire din executie */ }

Вам также может понравиться