Noi te platim pentru timpul acordat , o postare , like , vizualizare subiect , sau creare subiect , insemna castig.
Suntem comunitatea unica din Romania care plateste pentru efortul depus . Ideile ,opiniile tale conteaza si sunt platite doar la noi.

Primele programe

Primele programe

Solus

Membru
Staff member
Fondator BitArena
Moderator
Utilizator
Joined
Jul 6, 2018
Messages
523
Reaction score
94
Points
26
Location
Bucuresti
Website
www.bitarena.eu

Reputation:

În această secţiune sînt prezentate şi explicate patru programe cu scopul de a asigura un suport de bază pentru prezentările din capitolele următoare.
Prin tradiţie primul program C este un mic exemplu din lucrarea devenită clasică – „The C programming language”, de Brian W Kernigham şi Dennis M Ritchie.

#include <stdio.h>
main() {
printf("Hello, world\n");
return 0;
}

Acest program afişează un mesaj de salut.
Prima linie indică faptul că se folosesc funcţii de intrare / ieşire, şi descrierea modului de utilizare (numele, tipul argumentelor, tipul valorii returnate etc) a acestora se află în fişierul cu numele stdio.h .
A doua linie declară funcţia main care va conţine instrucţiunile programului. În acest caz singura instrucţiune este un apel al funcţiei printf care afişează un mesaj la terminal. Mesajul este dat între ghilimele şi se termină cu un caracter special new-line ('\n').
Instrucţiunea return predă controlul sistemului de operare la terminarea programului şi comunică acestuia codul 0 pentru terminare. Prin convenţie această valoare semnifică terminarea normală a programului - adică nu au apărut erori în prelucrarea datelor.
Corpul funcţiei main apare între acolade.

Al doilea program aşteaptă de la terminal introducerea unor numere întregi nenule şi determină suma lor. În momentul în care se introduce o valoare zero, programul afişează suma calculată.

#include <stdio.h>
main() {
int s,n;
s = 0;
do {
scanf("%d",&n);
s += n;
} while (n!=0);
printf("%d\n",s);
return 0;
}

În cadrul funcţiei main se declară două variabile s şi n care vor memora valori întregi. Variabila s (care va păstra suma numerelor introduse) este iniţializată cu valoarea 0.
În continuare se repetă o secvenţă de două instrucţiuni, prima fiind o operaţie de intrare şi a doua o adunare.
Primul argument al funcţiei scanf - formatul de introducere "%d" - indică faptul că se aşteaptă introducerea unei valori întregi în format zecimal de la terminal (consolă). Al doilea argument indică unde se va depune în memorie valoarea citită; de aceea este necesar să se precizeze adresa variabilei n (cu ajutorul operatorului &).
În a doua instrucţiune la valoarea variabilei s se adună valoarea variabilei n. Operatorul += are semnificaţia adună la.
Această secvenţă se repetă (do) cît timp (while) valoarea introdusă (n) este nenulă. Operatorul != are semnificaţia diferit de.
În final funcţia printf afişează pe terminal valoarea variabilei s în format zecimal.

Al treilea program aşteaptă de la terminal introducerea unei valori naturale n, după care mai aşteaptă introducerea a n valori reale (dublă precizie): a0, a1, ..., an-1. În continuare se parcurge această listă şi se determină produsul valorilor strict pozitive. În final programul afişează produsul calculat.

#include <stdio.h>
main() {
int n,i;
double a[100], p;
scanf("%d",&n);
for (i=0; i<n; i++)
scanf("%lf",&a);
p = 1;
for (i=0; i<n; i++)
if (a>0)
p *= a;
printf("%lf\n",p);
return 0;
}


În cadrul funcţiei main se declară două variabile n şi i care vor memora valori întregi. Variabila n păstrează numărul de valori reale din lista a. Se declară de asemenea un tablou unidimensional a care va memora 100 de valori de tip real (dublă precizie), şi o variabilă p care va memora produsul cerut.
Se citeşte de la terminal o valoare n. În continuare se introduc valorile reale ai (i = 0, 1, ..., n-1). Formatul de introducere "%lf" indică faptul că se aşteaptă introducerea unei valori reale de la terminal, care va fi depusă la locaţia de memorie asociată variabilei ai. În locul construcţiei &a se poate folosi forma echivalentă a+i.
Pentru a introduce toate valorile ai se efectuează un ciclu for, în cadrul căruia variabila i (care controlează ciclul) ia toate valorile între 0 (inclusiv) şi n (exclusiv) cu pasul 1. Trecerea la următoarea valoare a variabilei i se face cu ajutorul operatorului ++.
În continuare variabila p, care va memora produsul valorilor cerute, se iniţializează cu 1. Fiecare valoare ai este verificată (instrucţiunea if) dacă este strict pozitivă şi în caz afirmativ este înmulţită cu valoarea p. Operatorul *= are semnificaţia înmulţeşte cu.


Al patrulea program este o ilustrare a unor probleme legate de capacitatea reprezentărilor valorilor de tip întreg şi virgulă mobilă.

#include <stdio.h>
int main() {
short k,i;
float a,b,c,u,v,w;
i=240; k=i*i;
printf("%hd\n",k);
a=12345679; b=12345678;
c=a*a-b*b;
u=a*a; v=b*b; w=u-v;
printf("%f %f\n",c,w);
if (c==w) return 0;
else return 1;
}


Variabila k, care ar trebui să memoreze valoarea 57600, are tipul întreg scurt (short), pentru care domeniul de valori este restrîns la –32768 ¸ 32767. Astfel că valoarea 1110000100000000(2) (în zecimal 57600), în reprezentare întreagă cu semn este de fapt –7936.
Al doilea set de operaţii necesită o analiză mai atentă; explicaţiile sînt valabile pentru programe care rulează pe arhitecturi Intel. Variabila c, care ar trebui să memoreze valoarea 2461357 (rezultatul corect), va avea valoarea 2461356, deoarece tipul float are rezervate pentru mantisă doar 24 de cifre binare. Rezultatul este foarte apropiat de cel corect deoarece rezultatele intermediare se păstrează în regiştrii coprocesorului matematic cu precizie maximă. Abia la memorare se efectuează trunchierea, de unde rezultă valoarea afişată.
Cu totul altfel stau lucrurile în cazul celui de al treilea set de operaţii. Aici rezultatele intermediare sînt memorate de fiecare dată cu trunchiere în variabile de tip float. În final se calculează şi diferenţa dintre cele două valori trunchiate, de unde rezultă valoarea 16777216.
Înainte de terminare se verifică dacă valorile c şi w sînt egale. În caz afirmativ se comunică sistemului de operare un cod 0 (terminare normală). În caz contrar se comunică un cod 1 (terminare anormală).
Rulaţi acest program pe diferite sisteme de calcul şi observaţi care este rezultatul.
 
Top