Sunteți pe pagina 1din 24

Proiectarea Asistata de Calculator

pentru Avionica
PACA

LABORATOR 2
Tipuri de date si operatori
in C , C++ si in C#
Tipurile de date si operatorii stau la baza oricarui limbaj de
programare. Ele stabilesc limitele unui limbaj si determina tipurile de
activitati pentru care poate fi utilizat.
• O variabila este o locatie de memorie cu nume, careia ii poate fi stocata o
valoare. Valoarea se poate modifica pe parcursul executarii programului.
Nu exista conceptul de variabila fara “tip” pentru ca tipul unei valori
determina in mod exact operatiile permise asupra sa.
• O constanta (literal), spre deosebire de variabila, desemneaza o valoare
fixa. Pentru fiecare tip de data exista un mod de declarare.

• Tipuri valorice
• Cuvinte cheie ale unei aplicatii
• Literali
• Variabile
• Operatori
Date in C
• Numele unei date
Numele unei date este un identificator si, ca urmare, trebuie sa respecte regulile
specifice identificatorilor. De asemenea, numărul de caractere care intra în compunerea unui
identificator este nelimitat, însa, implicit, numai primele 32 de caractere sunt luate în
considerare. Aceasta înseamnă ca doi identificatori care au primele 32 de caractere identice,
diferențiindu-se prin caracterul 33, vor fi considerați identici.
• In C sunt 4 tipuri de date de baza:
Tip Semnificatie
int Numar intreg
float Numar real, in virgula mobila, simpla precizie
double Numar real, in virgula mobila, dubla precizie
char Caracter (un singur octet)
Sunt 5 tipuri specifice datelor:
a) long
b) long long
c) short
d) unsigned
e) signed
Lungimea zonei de
memorie ocupate
Tip (în biţi) Descriere
MS- UNIX
DOS LINUX
char 8 8 Valoarea unui singur caracter; poate fi întâlnit în
expresii cu extensie de semn
unsigned char 8 8 Aceeaşi ca la char, fară extensie de semn
signed char 8 8 Aceeaşi ca la char, cu extensie de semn obligatorie
int 16 32 Valoare întreagă
long (long int) 32 64 Valoare întreagă cu precizie mare
long long int 32 64 Valoare întreagă cu precizie mare
short int 16 32 Valoare întreagă cu precizie mică
unsigned int 16 32 Valoare întreagă, fără semn
unsigned long int 32 64 Valoare întreagă, fără semn
float 32 32 Valoare numerică cu zecimale, simplă precizie (6 )
double 64 64 Valoare numerică cu zecimale, dublă precizie (10 )
long double 80 128 Valoare numerică cu zecimale, dublă precizie
Cuvinte cheie in C
auto else long switch
break enum register typedef
case extern return union
char float short unsigned
const for signed void
continue goto sizeof volatile
default if static while
do int struct _Packed
double

Aceste cuvinte cheie (33) nu pot fi abreviate, folosite ca nume de variabile


sau folosite ca alt tip de identificator.
Date in C++
• In C++ tipurile de date sunt aproape aceleasi. In plus apare tipul boolean care
poate avea unul din cele doua valori: adevarat sau fals. Un boolean este utilizat
pentru a reflecta rezultatul unei operatii logice.
• Cuvintele cheie sunt aceleasi ca in C (32), in afara de _Packed care nu mai este
utilizat in C++. In plus apar alte 30 cuvinte cheie noi:

asm dynamic_cast namespace reinterpret_cast


bool explicit new static_cast
catch false operator template
class friend private this
const_cast inline public throw
delete mutable protected true
try typeid typename using
virtual wchar_t
Date in C# Tipuri valorice
Cuvinte cheie in C#

In general, cuvintele cheie nu pot fi folosite in programele pe care le scriem dandu-le o alta
semnificatie. In cazul in care, totusi, dorim sa le dam o alta semnificatie, va trebui sa le scriem cu
simbolul @ ca prefix.
Cele mai importante fisiere antet standard ANSI sunt:
Fisiere header alloc.h - declara functii de alocare, redactare si eliberare memorie;
assert.h - defineste macroinstructiunea assert ( ) care se foloseste la
diagnosticarea de erori din program;
Fisierele header se includ in bios.h - contine definitii de functii pentru verificarea echipamentelor periferice si
pentru apelarea directa a serviciilor BIOS;
program cu ajutorul directivei :
conio.h - defineste functii video pentru lucrul cu consola: afisare texte, controlul
#include ferestrelor, pozitionarea cursorului, controlul atributelor de scriere etc;
ctype.h - contine functii pentru transformarea si clasificarea codurilor de
caractere;
# include <fisier-header> -in dir.h - defineste functii pentru lucrul in directoare si cu specificari de fisier
acest mod fisierul de inclus este MS-DOS;
cautat doar in directorul specificat errno.h - defineste constante simbolice cu coduri de eroare MS-DOS;
in Options/Directories/Include graphics.h - contine functii grafice: setare paleta de culoare; desenare linii,
dreptunghiuri, curbe, sectoare de umplere; salvare, restaurare imagini video etc;
directories
io.h - contine functii de I / O pentru prelucrarea la nivel inferior a fisierelor;
# include “fisier-header” -in math.h - defineste majoritatea functiilor matematice uzuale precum si acelor
acest mod fisierul de inclus este mai importante constante matematice;
cautat mai intai in directorul curent mem.h - contine functii pentru copiere zone de memorie, cautare, comparare
siruri de caractere;
si daca nu este gasit aici este cautat
signal.h - defineste semnale si functii necesare la depanarea programului;
in directorul specificat in
stdarg.g - defineste macrouri si functii ce permit lucrul cu functii cu numar
Options/Directories/Include variabil de argumente;
directories stdio.h - contine functii de intrare / iesire cu tastatura si consola precum si
functii pentru prelucrarea la nivel superior a fisierelor;
stdlib.h - defineste tipuri, macrouri si functii generale: sortare, conversii, alocare
memorie, generare numere aleatoare, comunicare cu mediul etc.;
string.h - contine functii ce permit prelucrarea sirurilor de caractere;
time.h - defineste functii pentru fixarea si obtinerea timpului sistem.
Literali

• Literalii desemneaza valorile fixate, de exemplu, nr. 35 este un literal.


Literalii se mai numesc si constante si pot fi de orice tip valoric.
Constantele de tip caracter sunt incluse intre apostrofuri (exemple: ‘a’, ‘$’,
etc.) In ceea ce priveste literalii intregi, tipul fiecarui literal este cel mai mic
tip intreg care permite memorarea sa, incepand de la int. Un literal intreg
poate fi de tip: int, uint, long sau ulong. Pentru specificarea unui literal
uint se adauga un u sau U. De exemplu 123 este de tip int in timp ce 123u
este de tip uint. In mod analog pentru literali de tip long se adauga l sau L
in timp ce pentru literali de tip ulong se adauga ul sau UL.
• Literalii in virgula mobila sunt in mod implicit de tip double. Daca dorim sa
specificam un literal de tip float adaugam f sau F (de exemplu, 123.4f este
de tip float).
• Pentru specificarea unui literal de tip decimal se adauga sufixul m sau M
(ex: 1.43m).
• Pentru specificarea unui literal hexazecimal se utilizeaza prefixul 0x (ex: 1)
c=0xFF; //255 in zecimal, 2) in=0x1a; //26 in zecimal).
Variabile
• O variabila reprezinta o locatie de memorie cu nume, careia ii poate fi atribuita o
valoare. Valoarea unei variabile poate fi modificata pe parcursul programului. Variabilele
sunt declarate printr-o instructiune de forma:
tip nume_var;
unde tip reprezinta tipul variabilei, iar nume_var numele variabilei. Variabilele trebuie
declalarate inainte de a fi folosite, de asemenea tipul variabilei nu poate fi modificat pe
parcursul duratei sale de viata. Tipul variabilei determina operatiile permise asupra
variabilei.
• Dupa declararea variabilei, aceasta trebuie initializata. Initializarea unei variabile poate
fi facuta printr-o instructiune de atribuire:
nume_var=val;
unde val reprezinta valoarea atribuita variabilei nume_var (Exemple: int i=10; bool
f=true; float fn=12.4f; long o=126L). De asemenea initialzarea poate fi facuta dinamic,
utilizand orice expresie valida la momentul in care variabila este initializata.

REGULI
- primul caracter al unei variabile trebuie sa fie o litera, caracterul underscore “_” sau
simbolul at “@” ;
-urmatoarele caractere pot fi litere, numere sau caractere underscore;
-nu pot fi utilizate cuvinte cheie drept identificatori.
Operatori
• Un operator reprezinta un simbol care determina compilatorul sa
realizeze o anumita operatie matematica sau logica. Sunt patru
categorii de operatori: aritmetici, pe biti, relationali si logici.
Operatori aritmetici Operatori aritmetici Semnificatie
•Atunci cand se aplica operatorul / asupra unor + Adunare ( si plus unar )
intregi, restul este trunchiat, de exemplu: 14/3 este
- Scadere ( si minus unar )
egal cu 4.
•O diferenta in C# fata de C si C++ este faptul ca * Inmultire

operatorul modulo se poate aplica atat tipurilor intregi / Impartire


cat si celor in virgula mobila (Ex: 14.0 % 3.0=2,
% Impartire Modulo ( rest )
14.2 %3.0=2.2, 14.0%3.1=1.6.
•Operatorii unari de incrementare si decrementare ++ Incrementare
functioneaza la fel. Acestia sunt: -- Decrementare
x++ (forma postfixata),
++x (forma prefixata),
Operator Exemplu Explicaţie
x-- (forma postfixata), += a += 7 a=a+7
--x (forma prefixata) -= b -= 6 b=b–6
*= c *= 5 c=c*5
/= d /= 4 d=d/4
%= e %= 3 e=e%3
Operatori
Operatori relationali Operatori Semnificatie

•Operatorii relationali se refera la relatiile de ordine relationali


care pot exista intre doua valori, iar operatorii logici == egal cu
desemneaza modalitatile in care se pot asocia valorile != diferit de
de adevar true si false. Operatorii relationali se
utilizeaza deseori cu cei logici. Rezultatele intoarse de < mai mic
operatorii relationali si logici sunt de tip bool. > mai mare
•In cazul operatorilor relationali <,>,<=,>= operanzii
<= mai mic sau egal
trebuie sa apartina tipurilor pe care este definita o
relatie de ordine. >= mai mare sau egal
Operatori logici
•In cazul operatorilor logici, operanzii trebuie sa fie de Operatori logici Semnificatie
tip bool. In tabelul de mai jos sunt precizate rezultatele
operatiilor logice. S-a folosit conventia: 0=false si ! negatie logica (non)

1=true. & SI
p q p&q p|q p^q !p | SAU
0 0 0 0 0 1 ^ SAU exclusiv
1 0 0 1 1 0
&& SI logic (scurtcircuitat)
0 1 0 1 1 1
|| SAU logic (scurtcircuitat)
1 1 1 1 0 0
Tabelul de prioritati

Prioritate Tip Operatori Asociativitate


() [] f() . x++ x-- new typeof sizeof
0 Primar ->
checked unchecked ->
+ - ! ~ ++x --x (tip) true false & sizeof
1 Unar ->
*/%
2 Multiplicativ */% ->
3 Aditiv +- ->
4 De deplasare << >> ->
5 Relational < > <= >= is as ->
6 De egalitate == != ->
7 AND (SI) logic & ->
8 XOR (SAU exclusiv) logic ^ ->
9 OR (SAU) logic | ->
10 AND (SI) conditional && ->
11 OR (SAU) conditional || ->
12 Conditional (ternar) ?: <-
13 atribuire simpla = <-

14 atribuire compusa *= /= %= += -= ^= &= <<= >>= |= <-


• Citirea si afisarea tipurilor de date

%d, %i – numere intregi in baza 10 Ex: printf("%d",x); scanf(“%d”,&i);


%o – pt baza 8, intregi fara semn Ex: printf("%o",x)
%x,%X – pt baza 16, intregi fara semn Ex: printf("%x",x)
%ld – pt long int
%hd – pt short int
%f - pt date de tip real Ex: printf("%f",x)
%c – pt caractere Ex: printf("%c",'c'); scanf(“%c”,&g);
%s – pt siruri Ex: printf("%s","sir")
Exemplu de citire si scriere
de pe / pe ecran
#include "stdafx.h"
#include "conio.h"
int _tmain(int argc, _TCHAR* argv[])
{
float a; // am declarat o variabila de tip virgula mobila
printf("%s","Tastati un numar real ");
scanf_s("%f",&a);
printf("%s\t%f\n","Ati tastat nr ",a);
_getch();
}
Instructiuni
Instructiunea if
Instructiunea if are sintaxa:
if (conditie)
{
Instructiune 1;
}
else
{
Instructiune 2;
}
Instructiunea switch
In cazul instructiunii switch in C/C++, daca la finalul instructiunilor dintr-o ramura case nu exista break, se
trece la urmatorul case. In C# se semnalizeaza eroare. Exista si aici posibilitatea de a face verificari
multiple (in sensul de a trece la verificarea urmatoarei conditii in case).
Instructiunea switch admite in C# variabila de tip sir de caractere care sa fie comparata cu sirurile de
caractere din case-uri

Instructiunea while
Instructiunea while are sintaxa:
while (conditie) {Instructiuni};
Cat timp conditie este indeplinita se executa Instructiuni.
- O funcţie in C este echivalentă cu o rutină sau o funcţie
Functii în FORTRAN sau cu o procedură în PASCAL.
- O funcţie furnizează o modalitate convenabilă de a
încapsula anumite calcule care pot fi reluate ulterior.
#include "stdafx.h"
#include <stdio.h>
#include "conio.h" int putere(int baza, int n)
int putere (int m, int n); //prototip functie {int i,p;
void main() p=1;
for(i=1;i<=n;++i)
{
p=p*baza;
int i, a[10]; // declaratie tablou return p;
a[0]=1; }
for (i=0; i<10; ++i)
{
a[i]=2*i;
printf("%d %3d %6d \n",i, putere (a[i],i), putere(-2*a[i],i));
}
_getch();
return ;
}
#include <stdafx.h>
#include <stdio.h> Variabile externe, variabile
#include <iostream> automate si domenii de
#include "conio.h" vizibilitate
int p; // variabila externa
int putere (int m, int n);
int putere(int baza, int n)
void main()
{int i; // variabila interna
{ (automatica)
int i, a[10], dummy, p1, p2; p=1;
a[0]=1; for(i=1;i<=n;++i)
for (i=0; i<10; ++i) p=p*baza; // modificarea variabilei
{ externe
a[i]=2*i; return 0;
dummy=putere(a[i],i); }
p1=p ;
In cadrul funcţiilor se definesc variabile locale care
dummy=putere(-2*a[i],i);
sunt volatile (automate) (ex: i, p1, p2). Trebuie
p2=p; iniţializate de fiecare dată urmând ca la închiderea
printf("%d %3d %6d \n",i, p1, p2); funcţiei să piardă valoarea.
Spre deosebire de acestea in afara funcţiilor se pot
} defini o serie de variabile externe care au valoarea
_getch(); „0” începând de la momentul definirii, dar ulterior
return; pot fi modificate cu ajutorul funcţiilor, putându-se
face astfel transferul rezultatelor intre funcţii prin ele
} ( ex: variabila p)
Utilizarea operatorilor
#include "stdafx.h"
#include "conio.h"
#include <stdio.h>
// definitia an bisect: (sa fie divizibil cu 4 dar sa nu fie
// divizibil cu 100) sau (sa fie divizibil cu 400)
Evaluarea anului void main()
bisect { int an;
printf("introduceti anul\n");
scanf_s("%d",&an);
if((an%4==0&&an%100!=0)||an%400==0)
printf("%d este an bisect\n",an);
else
printf("%d nu este un an bisect\n",an);
_getch();
return;
}
Operatori şi expresii de atribuire, expresii condiţionale

#include "stdafx.h"
#include "conio.h"
#include " stdio.h “

void main()
{
int i, a[20], b[20],z[20];
Gasirea valorii maxime
din 2 tablouri for (i=0; i<20; i+=2)
{
a[i]=-7+2*i;
b[i]=i;
z[i]=a[i]>b[i]?a[i]:b[i];
printf("%d %3d %3d %3d\n",i, a[i], b[i], z[i]);
}
_getch();
return;
}
Verificarea paritatii
unui numar intreg
C sau C++ C#
using System;
using System.Collections.Generic;
using System.Linq;
#include "stdafx.h" using System.Text;
#include "conio.h" namespace NumarPar
#include "stdio.h" {
class Program
void main() {
{ int x; static void Main(string[] args)
printf("introduceti nr intreg x=\n"); { int x;
scanf_s("%d",&x); x = Convert.ToInt32(Console.ReadLine());
if (x % 2 == 0) printf("Acest nr if (x % 2 == 0) Console.WriteLine("Acest numar
este par\n"); este par");
else printf("Acest numar este else System.Console.WriteLine("Acest numar este
impar"); impar");
_getch(); Console.ReadKey();
return; }
} }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
Exemple in C#
namespace ConsoleApplication1
{ Verificare operator
class Program
{
static void Main(string[] args)
{
char op;
Console.WriteLine("Introduceti un operator: ");
op = (char)Console.Read();
switch(op)
{
case '+': Console.WriteLine("Operator plus: folosit pentru adunare\n"); break;
case '-': Console.WriteLine("Operator minus: folosit pentru scadere\n"); break;
case '*': Console.WriteLine("Operator de inmultire\n"); break;
case '/': Console.WriteLine("Operator de impartire\n"); break;
case '=': Console.WriteLine("Operator egal\n"); break;
default: Console.WriteLine("Operator necunoscut\n"); break;
}
Console.ReadKey();
}
}
}
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
void main()
Exemple in C
{char op;
printf("Introduceti un operator: "); Verificare operator
scanf("%c",&op);
printf("%c",op);
switch(op)
{
case '+': printf("Operator plus: folosit pentru adunare\n");
break;
case '-': printf("Operator minus: folosit pentru scadere\n");
break;
case '*': printf("Operator de inmultire\n");
break;
case '/': printf("Operator de impartire\n");
break;
case '=': printf("Operator egal\n");
break;
default: printf("Operator necunoscut\n");
break;
}
_getch();
return ;
}

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