organizarea datelor · • locația este organizată prin precizările din program, date de...
TRANSCRIPT
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
LABORATOR 4
Organizarea datelor
Instrucțiuni intrare/ieșire
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Cuprins • Tipuri de date
• Variabile globale, variabile locale
• Adresare directă/indirectă
• Funcții de intrare/ieșire
• Operatori/prioritatea operațiilor
• Exerciții propuse
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Tipuri de date în C
• După locul de declarare
• Globale
• Locale
• Variabile care memorează o singură valoare
Tip variabilă C Nr. octeți
(bytes) Limita inferioară Limită superioară Utilizare
char 1 -128 127 Caractere sau numere
unsigned char 1 0 255 Numere mici pozitive
short int 2 -32768 +32767 Numere întregi
unsigned short int 2 0 65536 Numere întregi pozitive
(long) int 4 -2^31 +2^31-1 Numere întregi foarte mari
float 4 -3.2*10^38 3.2*10^38 Numere reale
double 8 -1.7*10^308 1.7*10^308 Numere reale foarte mari
void 0 - - Nici un tip
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Tipuri de date în C • Memorarea unei informații cu mai mulți parametri - nr complexe (struct)
• locația este organizată prin precizările din program, date de utilizator,
• DAR FOLOSIND TIPURILE FUNDAMENTALE
• Memorarea în cazurile în care dorim să păstram valorile succesive ale unei
variabile - de ex. măsurarea experimentală a unui parametru – arii de date.
• Condiția: sunt toate valori de același tip fundamental
• După modul de adresare :
• directă - variabile locale statice; prezentate anterior
• indirectă – pointeri
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Funcții standard de citire-scriere Functii de citire-scriere caractere individuale:
getchar()
putchar()
getch()
putch()
Functii de citire-scriere linii de text:
gets()
puts()
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Afișare int printf (const char *format, ... );
TYPE Format
char %c, %d
int %d
unsigned int %u
long int %lu
unsigned long %lu
float %f %g %e %E
double %lf %lg %le %lE
long double %Lf %Lg %Le %LE
http://www.cplusplus.com/reference/cstdio/printf/
%[flags][width][.precision]specifier
flags:
- Aliniere la stânga corespunzător dimensiunii câmpului
– dat de width. Alinierea la dreapta este implicită.
+ Forțează apariția semnului valorii (+ or -) chiar pentru
numerele pozitive. Implicit, numai numerele negative vor
fi afișate precedate de semn.
0 completarea cu zerouri la stânga.
# utilizat cu %x, %X sau %o va preceda valoarea cu
simbolul bazei numerice respective
width: număr total de caractere pentru afișare
precision: pentru datele de tip float/double – numărul de
zecimale
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Citire int scanf (const char *format, ... );
TYPE Format
char %c, %d
int %d
unsigned int %u
long int %lu
unsigned long %lu
float %f %g %e %E
double %lf %lg %le %lE
long double %Lf %Lg %Le %LE
Citește datele de la intrarea standard, le formatează
conform formatului impus și apoi le salvează la
adresele primite ca argumente.
Funcția returnează numărul conversiilor executate
cu succes
http://www.cplusplus.com/reference/cstdio/scanf/
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Conversii de tip (CAST)
• Pe parcursul execuției unui program valorile variabilelor se pot schimba:
– explicit :
– implicit:
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Operații
• Operatori aritmetici – atribuire a = b
– adunare a + b
– scădere a – b
– înmulțire a * b
– împărțire a / b
– modulo (rest) a % b
– Increment - Prefix ++a
- Sufix a++
– Decrement - Prefix --a
- Sufix a--
++5 --(k+1) ++i++
Se pot aplica numai asupra
L-valorilor
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Operații
• Operatori relaționali – egalitate a == b
– inegalitate a != b
– mai mare a > b
– mai mic a < b
– mai mare egal a >= b
– mai mic egal a <= b
• Operatori logici – Negație (NOT) !a
– ȘI logic a && b
– SAU logic a || b
a b !b a||b a&&b
0 0 1 0 0
0 1 0 1 0
1 0 1 1 0
1 1 0 1 1
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Operații
• Operatori la nivel de bit – Negare bit cu bit ~a
– ȘI bit cu bit a & b
– SAU bit cu bit a | b
– SAU exclusiv pe bit a ^ b
– Mutare la stânga a << b
– Mutare la dreapta a >> b
a b ~a a&b a|b a<<1 b>>1
001 101 110 001 101 0010 10
011 110 100 010 111 0110 11
101 000 010 000 101 1010 00
111 010 000 010 111 1110 01
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Operații
• Operatori aritmetici prescurtați – adunare a += b ( a+=b+3 a=a+(b+3) )
– scădere a -= b
– multiplicare a *= b ( a*=b+3 ????)
– împărțire a /= b
– Modulo a %= b
– AND pe bit a &= b
– OR pe bit a |= b
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Reguli de precedenţă
Operator Asociativitate
( ) ++ - - (sufix) Left-to-right
++ -- (prefix) ! ~ Right-to-left
* / % Left-to-right
+ - Left-to-right
< <= > >= Left-to-right
== != Left-to-right
&& || Left-to-right
?: Right-to-left
= += -= *= /= %= Right-to-left
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Exerciții propuse 1. Realizați un program care să afişeze codul ASCII al unui caracter citit de la tastatură (citirea se va face cu scanf() SAU getch() ).
2. Scrieţi un program care va afişa valoarea vitezei medii [km/h] citindu-se cu scanf() distanţa parcursă [km] şi timpul total [h]. Afişaţi şi în [m/s].
v[km/h] = d[km] / t [h]
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Exerciții propuse 3. Implementați următoarea interfață de interacțiune cu utilizatorul : >>>>>> Note Bacalaureat <<<<<<<<
Introduceți nota la Matematică: (citire nota)
Introduceți nota la Lb. Română: (citire nota)
Introduceți nota la Lb. Străină: (citire nota)
Introduceți nota la Măsurări Electrice: (citire nota)
Introduceți nota la Geografie: (citire nota)
>>>>>>> Situația Școlară <<<<<<<<<
Introduceți media generală la Matematică: (citire medie)
Introduceți media generală la Fizică: (citire medie)
Introduceți media generală a disciplinelor tehnice: (citire medie)
>>>>>> Sinteza rezultatelor obținute <<<<<<<
Media Examenului de Bacalaureat : (afișare medie)
Media de Admitere la Facultate : (afișare medie)
Abilități de comunicare : (afișare medie)
>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Exerciții propuse 4. Realizați programul care implementează următorul pseudocod:
program operații matematice
citire a, b, c
afișare a, b, c
d = a + b * c
e = (d – b)/(a+d)
f = d * d ^ e – e ^ a // pow(d,e) – biblioteca math.h
citire x, y
afișare x, y
z = y
y = x
x = z
afișare x, y
afișare d, e, f
sfârșit program
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Exerciții propuse 5. Scrieți un program care citește 5 numere de la tastatură și le afișează în ordinea în care au fost citite cât și în ordine inversă. Afişaţi adresele primului şi ultimului număr. (vezi C3-23)
6. Implementați un program care calculează timpul de umplere cu lichid al unui rezervor cilindric, cu un volumul specificat in metri cubi, prin intermediul unei conducte cu diametru si debit cunoscut.
În câte secunde va ajunge rezervorul la 50% din capacitate, dacă din el este extras lichid prin aceiași conductă cu un debit de 20 litri/secundă ?
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Exerciții propuse 7. Implementați un program care realizează citirea unei valori reprezentând capacitatea de stocare a unui hard disk, exprimată în giga octeți și afișează această valoarea în mega octeți și tera octeți.
8. Realizați un program care calculează timpul de transfer a unui fișier de date cu dimensiune cunoscută, specificată în mega octeți, între două calculatoare prin intermediul unei conexiuni LAN Full Duplex de viteză 100Mbps.
Programarea Calculatoarelor şi Limbaje de Programare www.infopuc.ro
Exerciții propuse 9. Scrieți un program care citește de la tastatură un număr <= 15 și afișează valoarea sa în binar (indicație: folosiți operatorii /2 și %2).
10. Considerând bancnotele 10, 5 şi 1 RON scrieţi un program care va calcula numărul optim de bancnote necesare pentru restituirea unei anumite sume citite de la tastatură.
(ex. 78 = 7 *10 + 1 * 5 + 3 * 1)