Sunteți pe pagina 1din 5

Laborator 10 Exerciii cu pointeri

1. S se scrie un program care determin cte vocale au cuvintele transmise ca i parametrii func iei main. Se va lucra cu pointeri. #include<stdio.h> #include<conio.h> int main(int argc, char *argv[]){ int i=0,j,nr_vocale; char *p; for (i=0;i<argc;i++) printf("\n%s",argv[i]); for (i=1;i<argc;i++){ nr_vocale=0; for (p=argv[i];*p!='\0';p++) if(*p=='a' ||*p=='e' ||*p=='i' ||*p=='o' ||*p=='u' ) nr_vocale++; printf("\ncuvantul %s are %d vocale",argv[i],nr_vocale); } getch(); } Obs. Dup ce a fost editat codul surs al programului se va da comanda Build nume_proiect, n urma creia se va crea fiierul executabil al proiectului. Acesta va fi amplasat n directorul Debug din proiect. n continuare fiierul executabil va fi rulat din Command Prompt, dndu-i ca i parametrii cuvintele pentru care vrem sa contorizam vocalele. Pentru a ajunge n directorul Debug se va utiliza comanda CD (Change Directory), vezi figura 1.

Figura 1 - Rularea proiectului cu parametrii din linie de comanda 1

2. S se citeasc un ir de la tastatur i apoi s se afieze pe ecran caracter cu caracter. Elementele irului vor fi accesate prin indeci i prin aritmetica pointerilor.
#include<stdio.h> #include<string.h> #include<conio.h> void afiseaza_prin_indici(char *sir){ int k; printf("\n sirul afisat utilizandu-se tablou ci indice: "); for(k=0; sir[k]; ++k) putchar(sir[k]); } void afiseaza_prin_pointer(char *s){ printf("\n sirul afisat utilizandu-se pointeri: "); while(*s) putchar(*s++); } void main(void){ char sirdat[20]; printf("\n dati un sir de max 20 caractere:"); gets(sirdat); /* apelarea celor doua functii pentru afisarea folosind indici si pointeri */ afiseaza_prin_indici(sirdat); afiseaza_prin_pointer(sirdat); getch(); }

3. Se introduc de la tastatur mai multe iruri formate din cuvinte despr ite prin spa ii, pn la tastarea sirului terminat. S se afieze numrul de cuvinte din fiecare ir precum i numarul caracterelor din fiecare cuvnt al irului, utilizndu-se referirea caracterelor cu ajutorul unui pointer la ir.
#include<stdio.h> #include<string.h> #include<conio.h> void main(void) { char sir[80],*ptrsir; int nrcuvinte, nrlitere; do { ptrsir = sir; /* in ptrsir se memoreaza adresa primului caracter din sir */ printf("\n\n Tastati sirul: "); gets(sir); /* citirea unui sir de la tastatura */ printf("\n ati tastat sirul de caractere:"); printf("\n %s\n",sir); nrcuvinte = 0; while (*ptrsir != '\0') /* cat timp nu este sfarsit de text 2

(sir) */ { nrlitere = 0; printf("\n in cuvantul %d ", nrcuvinte); while (*ptrsir != ' '&& *ptrsir != '\0') /* cat timp nu e sf de cuvant */ { nrlitere++; /* numara literele dintr-un cuvant */ ptrsir++; /* se incrementeaza adresa sirului */ } printf("sunt %d litere", nrlitere); nrcuvinte++; while(*ptrsir == ' ') ptrsir++; /* se omit spatiile */ } }while (strcmp (sir,"terminat")); /* pana cand s-a tastat sirul terminat */ getch(); }

4. S se realizeze un program care citete i afieaz un vector cu ajutorul pointerilor.


#include<stdio.h> #include<stdlib.h> #include<conio.h> int citire(int tab[]){ //citeste elementele lui tab - accesarea fiecarui element se //face printr-un pointer la el int *pi,i, N; printf("Introduceti nr de elemente: "); scanf("%d", &N); pi=tab; printf("Introduceti elementele tabloului:\n"); for (i=0;i<N;i++) { scanf("%d",pi); pi++; } return pi-tab; } void tiparire(int tab[], int n){ // tipareste elementele lui tab prin accesare prn pointeri int *pi; printf("Elementele tabloului:\n"); for (pi=tab; pi<tab+n; pi++) printf("%d ",*pi); } int main(){ int tab[20], n; system("cls"); n=citire(tab); 3

tiparire(tab, n); getch(); return 0; } 5. S se realizeze un program care citete dou iruri de la tastatur i n funcie de opiunea utilizatorului s se afieze dac lungimea irurilor este egal, sau primul caracter de la cele dou iruri este acelai, sau dac cele dou iruri au acelai coninut. Se va lucra cu cel puin un pointer la funcie. #include<stdio.h> #include<conio.h> #include<string.h> #include<stdio.h>

int(*pf) (char *,char *); // se construieste prototipul functiei int comp_lung(char *sir1,char *sir2){ return (strlen(sir1)==strlen(sir2)); } int comp_prin_car(char *sir1,char *sir2){ return (sir1[0]==sir2[0]); } int comp_abs(char *sir1,char *sir2){ int i; if(strlen(sir1)!=strlen(sir2)) return 0; for(i=0;i<strlen(sir1);i++) if(sir1[i]!=sir2[i]) return 0; return 1; } void main(){ char sira[100],sirb[100]; int rez,opt; printf("Introduceti primul sir terminat cu <ENTER> \n"); gets(sira); printf("Introduceti al 2-lea sir terminat cu <ENTER> \n"); gets(sirb); while(1){ printf("\n\nIntroduceti criteriul de comparatie intre siruri ->"); printf("\n 0=lungime \n 1= compararea primului caracter \n 2=compararea absoluta\n 3=iesire :"); printf("Optiunea: "); scanf("%d", &opt); switch(opt){ case 0: pf=comp_lung; break; case 1: pf=comp_prin_car; break; 4

case 2: pf=comp_abs; break; case 3: return; default: printf("Nu ati introdus optiunea corecta!\n"); } rez=(*pf)(sira,sirb); if(rez == 1) printf("sirurile sunt egale !"); else printf("sirurile sunt diferite !"); } getch(); } 6. S se ordoneze cu ajutorul metodei qsort() din biblioteca stdlib.h elementele unui vector de ntregi. #include <stdio.h> #include <conio.h> #include <stdlib.h> int compara_intregi(const void *a, const void *b) { const int *pa = (const int *)a; const int *pb = (const int *)b; return *pa - *pb; } void afis(int v[], int n) { int i; for(i=0; i<n; i++) printf("%d ", v[i]); printf("\n"); } void sortare_vector_intregi() { int v[] = { 5,3,2,1,9,7}; int n = sizeof(v)/sizeof(int); //n=6 afis(v, n); qsort(v, n, sizeof(int), compara_intregi); afis(v, n); } void main(){ sortare_vector_intregi(); getch(); }

Probleme propuse:
1. S se ruleze i s se studieze exemplele din lucrarea de laborator . 2. S realizeze un program care citete i afieaz o matrice cu ajutorul pointerilor. 3. S se sorteze un tablou de iruri de caractere cu ajutorul metodei qsort(). 5

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