Programarea Calculatoarelor, seria CC
Atunci când dorim să implementăm un program, primul pas îl reprezintă scrierea instrucţiunilor acestuia într-un limbaj de programare (în acest caz, limbajul C). Pentru a realiza acest lucru se poate folosi orice editor simplu de texte, de exemplu:
Fişierul astfel obţinut este un simplu fişier text şi se numeşte fişier sursă. Conţinutul unui fişier sursă se numeşte cod sursă. Fişierele sursă pentru limbajul C au in mod convenţional extensia .c.
În continuare, pentru a obţine un program executabil, avem nevoie de un compilator specific limbajului care sa "traducă" codul sursă în instrucţiuni specifice procesorului. Conţinutul fişierului executabil rezultat se numeşte cod maşină, iar fişierele compilate (nu neapărat executabile) poartă numele de fişiere binare.
Există numeroase compilatoare pentru limbajul C. Cel mai cunoscut si mai răspândit este de departe gcc (denumirea vine de la GNU C Compiler), care poate fi instalat atât pe Linux, cât şi pe Windows sau Mac OS.
Există, bineînţeles, şi altele:
#include <stdio.h>
int main(void)
{
printf("PC 2010\n");
return 0;
}
Salvaţi fişierul în directorul /home/student/ cu numele exemplu.c.
Deschideţi un terminal şi introduceţi comanda:
gcc exemplu.c
Executabilul creat se va numi implicit a.out. Pentru a-l rula, folosiţi comanda:
./a.out
Puteţi specifica voi un nume pentru fişierul executabil cu ajutorul opţiunii -o astfel:
gcc -o exemplu.exe exemplu.c
Cu toate acestea, extensia .exe este folosită de obicei pentru executabilele de Windows, iar executabilele de Linux nu au, în mod normal extensie! Este bine sa respectaţi aceste convenţii nescrise pentru a vă face mai uşor înţeleşi.
Mai ales la început, vi s-ar putea părea mai uşor să folosiţi un mediu de programare care vă permite să editaţi codul sursă şi să compilaţi şi rulaţi programele direct dintr-o interfaţă grafică. Există foarte multe medii integrate de dezvoltare pentru limbajul C, fiecare cu avantajele şi dezavantajele sale. Dintre cele mai cunoscute, amintim doar câteva:
Vă încurajăm să le încercaţi în timpul liber pentru a vă forma o părere despre care vi se potriveşte mai bine :).
În laborator există instalat mediul Code::Blocks. Folosirea acestuia este intuitivă. Deschideţi Code::Blocks şi creaţi un nou fişier (File -> New -> Empty File).
Copiaţi programul de mai sus şi salvaţi-l. Compilaţi şi rulaţi programul (folosind meniul, iconiţele, shortcut-urile etc).
Pentru depanarea programelor va fi necesar să creaţi un nou proiect (File -> New -> Project). Alegeţi Console Application şi în fereastra următoare, limbajul C. Completaţi numele proiectului şi calea unde doriţi să fie creat (de exemplu, în /home/student/).
Copiaţi următorul program:
int main()
{
int a, b, rest;
a = 150;
b = 84;
while (b > 0) {
rest = a % b;
a = b;
b = rest;
}
printf("cmmdc(150, 84) = %d\n", a);
getchar();
return 0;
}
Adăugaţi un breakpoint la linia a = 150; (click la dreapta numărului corespunzător liniei) şi porniţi programul în modul de depanare (debugging) cu ajutorul tastei F8. Pentru a urmări valorile unor variabile pe parcursul execuţiei programului pas cu pas, faceţi vizibilă fereastra watch(Debug -> Debugging Windows -> Watches) şi adăugaţi numele variabilelor pe care vreţi să le monitorizaţi (click dreapta în interiorul ferestrei şi alegeţi Add Watch). Rulaţi programul instrucţiune cu instrucţiune (cu ajutorul tastei F7) şi urmăriţi cum se modifică valorile variabilelor.
Încercaţi să vă familiarizaţi cu editorul şi cu debuggerul şi cereţi explicaţii suplimentare dacă este cazul.
Descriptorii de formatare au următorul prototip (ce se afla între
%[flags][lăţime][.precizie][specificatori de lungime]specificatori de tip
A. flags:
B. lăţime şi precizie sunt specificate fie prin întregi, fie prin caracterul
va afişa întregul
C. specificatorii de lungime:
D. specificatorii de tip:
Pentru formatele
Mai găsiţi detalii şi pe http://www.cplusplus.com/reference/clibrary/cstdio/printf.html.
Problema generării unor numere aleatoare poate fi considerată iniţial una complicată, dar limbajul C ne pune la dispoziţie biblioteca
Utilizând funcţia
Valorile returnate de această funcţie sunt de fapt termenii unui şir de numere generat după o anumită formula ce foloseşte ca punct de plecare o valoare dată. Din cauza acestui aspect, pentru aceeasi valoare iniţială fixată, programul va genera la fiecare rulare aceleaţi numere aleatoare. Pentru a evita acest lucru, biblioteca pune la dispozitie funcţia
Astfel, paşii pentru rezolvarea problemei noastre sunt următorii :
Notă: pentru a garanta că la fiecare rulare a programului valoarea seed este unică, recomandăm apelarea funcţiei
Scrieţi un program care citeşte şi afişează 3 numere de tip
1e2 1e2 1e2
23.22e+03 23.22e+3 23.22e+03
21 1201 122234215001
Programul următor afişează valorile funcţiei
#include <stdio.h>
#include <math.h>
int main()
{
double x, PI = M_PI;
for (x=0;x<=2*PI;x=x+PI/10)
printf ("%lf \n", sin(x));
getchar();
return 0;
}
Modificaţi programul astfel încat pentru fiecare
Scrieţi un program care să determine cadranul în care se află un punct dat prin coordonatele sale (întregi sau reale). Se va afişa un număr între 1 şi 4 sau mesajul
Scrieţi un program care să verifice dacă 3 numere întregi date a,b,c pot forma lungimile laturilor unui triunghi.
Intrare | Ieşire |
a=10 b=10 c=20 |
DA |
a=10 b=5 c=30 |
NU |
a=5 b=10 c=10 |
DA |
Scrieţi un program care citeşte 3 numere date reprezentând lungimile laturilor unui triunghi şi care afişează tipul de triunghi cu aceste laturi:
Intrare | Ieşire |
a=10 b=10 c=10 |
echilateral |
a=4 b=5 c=3 |
dreptunghic |
a=5 b=10 c=10 |
isoscel |
Scrieţi un program care determină minimul şi maximul dintre 4 numere, folosing doar instructiunea
Se citesc 3 numere de la tastatură. Afişaţi-le în ordine crescătoare, folosind doar instrucţiunea
Scrieţi un program care va citi de la tastatură 3 intregi,
Intrare | Ieşire |
h=15 m=42 s=3 |
15:42:03 |
În programul anterior observaţi că dacă în loc de a introduce o valoare numerică tastaţi altceva (o literă, de exemplu) programul se comporta anormal. Încercati să modificaţi programul astfel încat să aveţi protecţie la datele eronate.
HINT:
Intrare | Ieşire |
h=1a m=42 s=3 |
Date incorect introduse! |
h=11 m=4.2 s=3 |
Date incorect introduse! |