Ligjerata 7 - Dr. Fisnik Dalipi

Download Report

Transcript Ligjerata 7 - Dr. Fisnik Dalipi

Universiteti Shtetëror i Tetovës
Fakulteti i Shkencave Matematike-Natyrore
Departamenti i Informatikës
PROGRAMIM I
Ligjerata 7
[email protected]
fisnikd.wordpress.com
Vektoret



Vektoret, sic e dime jane nje bashkesi elementesh
(variablash) te te njejtit tip, te ruajtur ne menyre te
njepasnjeshem ne memorje dhe cdo element
identifikohet nga nje indeks.
Kjo do te thote qe , nese ruajme 5 vlera te tipit
integer ne vektor, ne shmangim deklarimin
individual te tyre me nga nje identifikues per secilin.
Indeksi i pare i vektorit eshte gjithmone 0,
pavaresisht nga gjatesia e vektorit .
Mr. Fisnik Dalipi
Vektoret (vazhd.)



Deklarimi i vektorit eshte: tipi emri [elementet];
Per shembull: int V [5];
Shenim: Fusha elementet brenda kllapave [] kur
deklaron nje variable duhet te jete vlere konstante,
perderisa vektoret jane blloqe te memorjes statike
me nje madhesi te caktuar dhe kompilatori duhet te
jete ne gjendje te dije se sa memorje duhet ti kaloj
ketij vektori.
Mr. Fisnik Dalipi
Inicializimi i vektoreve



Kur deklarojme nje vektor lokal, nese nuk e
specifikojme, nuk do te inicializohet, dhe vlerat e tij
do te jene te papercaktuara deri ne momentin qe
ruajme vlera ne te.
Nese deklarojme nje variable global, permbajtja e
tij do te inicializohet me vleren 0. keshtu, nese
deklarojme vektorin jashte cdo funksioni(global):int
V [5];
Cdo element i V do te inicializohet me 0:
Mr. Fisnik Dalipi
Inicializimi i vektoreve





Por gjithsesi, kur edeklarojme je vektor, kemi
mundesine te inicializojme secilin prej tyre brenda
kllapave{ }. Per shembull:
int V [5] = { 16, 2, 77, 40, 12071 };
Numri i elementeve te inicializohet duhet te jete i
njejte me gjatesine e elementeve te vektorit.
Me ane te inicializimit mund te deklarojme nje
vektor, pa percaktuar nje numer elementesh brenda
kllapave katrore:
int v [] = { 16, 2, 77, 40,
12071 };
Mr. Fisnik Dalipi
Vektoret dydimensional

#include<iostream.h>

#define WIDTH 5

#define HEIGHT 3

int V [HEIGHT][WIDTH];

int n,m;

int main ()
{

Vektoret dy dimensional
mund te pershkruhen si
vektor vektoresh.
Deklarimi i tyre eshte :

tip emer[dimension1][dimension2]

int M [3][5];

for (n=0;n<HEIGHT;n++)

for (m=0;m<WIDTH;m++)

{


V[n][m]=(n+1)*(m+1);

Mr. Fisnik Dalipi

}

return 0;

}
Vektoret si parametra





Ne ndonje situate, duhet te kalojme nje vektor si
parameter per funksionin. Ne C++ nuk eshte e mundur te
kalosh me vlere nje bllok te tere memorje si parameter
per funksionin, por lejohet te kalohet vetem me adrese.
Per shembull nese kemi funksionin:
void procedure (int arg[])
Nese duam ti kalojme nje vektor ketij funksioni: int s [40];
Do te ishte e mjaftueshme te shkruanim nje thirrje te tille:
procedure (s);
Mr. Fisnik Dalipi
Vektoret si parametra
#include <iostream.h>
void printarray (int arg[], int length)
{
for (int n=0; n<length; n++)
cout << arg[n] << " ";
cout << "\n";
}


int main ()
{
int firstarray[]={5, 10, 15};
int secondarray[]={2, 4, 6, 8, 10};
printarray (firstarray,3); printarray
(secondarray,5); return 0;
}
Rezultati:
5 10 15
2 4 6 8 10
Si parameter per nje funksion mund te kalohet edhe nje matrice.
Mr. Fisnik Dalipi
Stringjet e karaktereve




Stringjet prezantojne nje radhe karakteresh, si
fjalet, fjalite.
In C++ nuk ka nje tip elemetar per ruajtur tipe
stringjesh. Por mund te perdoren shume mire vektor
te tipit char. Per shembull:
char S [20];
ruan nje string deri ne 20 karakter te gjate:
Mr. Fisnik Dalipi
Stringjet e karaktereve

Ky maksimum prej 20 karakteresh nuk eshte e
domosdoshme te plotesohet gjithmone. Keshtu qe,
perderisa vektoret e karaktereve mund te ruajne
stringje me te shkurter se totali i gjatesise se
vektorit, vendoset nje karakter ne fund te
stringut(null character) qe shkruhet 0 ose '\0'.
Mr. Fisnik Dalipi
Inicializimi i stringjeve





Inicializimi behet njesoj sit e gjithe vektoret:
char S[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Gjithashtu, stringjet e karaktereve kane nje menyre
shtese per te inicializuar vlerat e tyre duke
perdorur konstante stringjesh.
Konstantet e stringjve brenda thonjezave dyshe
kane gjithmone karakterin null ('\0') qe ngjitet
automatikisht ne fund. Per shembull
char S [] = "Hello";
Mr. Fisnik Dalipi
Inicializimi i strinjgeve






Ne te dy rastet stringu S eshte deklaruar me 6 karaktere
(elemente te tipit char): 5 karaktere te fjales Hello dhe
karakteri ('\0').
Instruksionet:
S = "Hello";
S[] = "Hello";
S= { 'H', 'e', 'l', 'l', 'o', '\0' };
Nuk jane te vlefshme per vektoret sepse
Mund te japim vlera te konstanteve ne nje vektor, vetem ne
momentin e inicializimit. Momenti i inicializimit te vektorit
eshte nje rast i vecante, dhe nuk eshte vlerdhenje megjithse
paraqitet me shenjen (=). Mr. Fisnik Dalipi
Vleredhenia e stringjeve



Nje menyre per ti dhene vlere nje stringu eshte:
s[0] = 'H';
s[1] = 'e';
s[2] = 'l';
s[3] = 'l';
s[4] = 'o';
s[5] = '\0';
Por sic shihet, kjo nuk eshte menyre praktike per tu
perdorur.
Mr. Fisnik Dalipi
Vleredhenia e stringjeve




Zakonisht per ti dhene vlera nje vektori dhe ne
menyre te vecante nje stringu perdoren funksione
strcpy. strcpy (string copy) percaktohet te libraria
cstring (string.hdhe thiret ne kete menyre:
strcpy (string1, string2);
Ky funksion kopjon permbajtjen e stringut2 te
string1. string2 mund te jete ose nje vektor, nje
shenjues, apo nje constant string. Per shembull
strcpy (mystring, "Hello"); //kopjon “Hello” te
stringu mystring
Mr. Fisnik Dalipi

Vleredhenia e stringjeve










// dhenja e vleres ne string
#include <iostream.h>
#include <string.h>
int main ()
{
char EmriIm [20];
strcpy (EmriIm,"J. Bajrami");
cout << EmriIm;
return 0;
}
Mr. Fisnik Dalipi
Rezultati: J.Bajrami
Vleredhenia e stringjeve




Nje metode tjeter per ti dhene vlere nje vektori eshte duke
perdorur (cin). Ne kete rast vlera e stringut jepet gjate
ekzekutimit nga perdoruesi .
Kur cin perdoret me stringje karakteresh shoqerohet nga
funksioni getline, qe thirret sipas kesaj sintakse:
cin.getline ( char buffer[], int length, char delimiter = ' \n');
Ku buffer eshte adresa ku do ruhet input (vektor), length
eshte gjatesia maksimale e buffer dhe delimiter eshte
karakteri qe perdoret per te treguar fundin e input-it nga
perdoruesi, qe by default eshte ('\n').
Mr. Fisnik Dalipi
Vleredhenia e stringjeve
#include <iostream.h>
 int main (){
 char mybuffer [100];
 cout << "Si quhesh? ";
 cin.getline (mybuffer,100);
 cout << "Miredita " << mybuffer << ".\n";
 cout << "Kush eshte skuadra jote e preferuar? ";

cin.getline (mybuffer,100);
 cout << "Pelqej " << mybuffer << " gjithashtu.\n";
 return 0;
 }
Mr. Fisnik Dalipi
Vleredhenia e stringjeve




cin>> mund te perdoret gjithashtu per te mare te dhenat nga
inputi standart. Kjo gjithashtu mund te perdoret ne vend te
cin.getline me stringjet e karaktereve.
cin >> mybuffer;
Kjo punon, po ka limite krahasuar me cin.getline :
 Lexon vetem nje fjale (jo gjithe fjaline) per aq kohe sa kjo
menyre perdor per delimiter nje hapsire, tab, new_line.
 Nuk specifikon gjatesine e buffer. Kjo e ben programin jot e
rregullt kur perdoruesi fut te dhena me shume se sa vektori
mund te mbaj.
Prandaj eshte me e rekomandueshme te perdoresh cin.getline
sesa cin>> per input stringjesh.
Mr. Fisnik Dalipi
Konvertimi i stringjeve ne tipe tjera

Per te konvertuar stringjet ne tipe te tjera perdoren
funksione te libraries cstdlib (stdlib.h) Si me poshte:
 atoi:
converton string ne int.
 atol: converton string ne long .
 atof: converton string ne float.

Te gjithe keta pranojne nje parameter dhe kthejne
nje vlere te tipit te caktuar(int, long apo float).
Shembull:
Mr. Fisnik Dalipi
Konvertimi i stringjeve ne tipe tjera







#include<iostream.h>
#include <stdlib.h>
int main ()
{
char mybuffer [100]; float
cmimi;
int sasia;
cout << “Jepe cmimin: ";
cin.getline (mybuffer,100);
cmimi = atof (mybuffer); cout
<< “Jepe sasine: ";









cin.getline (mybuffer,100);
sasia = atoi (mybuffer);
cout << “Cmimi total: " <<
cmimi*sasia;
return 0;
}
Outputi eshte:
Jepe cmimin: 2.75
Jepe sasine: 21
Cmimi total: 57.75
Mr. Fisnik Dalipi
PYETJE?