Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Programe demonstrative

c


Programe demonstrative

1) Programul prezentat in continuare genereaza un sir de n valori intregi aleatoare in intervalul [0,M 1] pe care le depune in tabloul X (alocat dinamic), si apoi le sorteaza crescator. 757c26h In continuare se genereaza k valori intregi aleatoare pe care le cauta in tabloul X. Pentru fiecare cautare cu succes se afiseaza pe terminal valoarea cautata si pozitia in tablou.



Valorile n k si M se iau in aceasta ordine din linia de comanda.

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int cmp(const void *A, const void *B)

int main(int ac, int **av)

n=atoi(av[1]); k=atoi(av[2]);

M=atoi(av[3]);

X=(int *)malloc(n*sizeof(int));

if (!X) return 1;

srand(time(NULL));

for (i=0; i<n; i++)

X[i]=rand()%M;

qsort(X,n,sizeof(int),cmp);

for (i=0; i<k; i++)

free(X);

return 0;

}

2) Sa reluam al treilea exemplu din capitolul precedent. Se citeste un fisier text care contine pe fiecare linie un nume (sir de caractere fara spatiu) si trei valori reale (note). Pentru fiecare linie se calculeaza media aritmetica a celor trei valori si se determina daca elementul este admis (fiecare nota este minimum 5) sau respins (cel putin o nota este sub 5). In final se afiseaza liniile in ordinea urmatoare: mai intii elementele admise in ordinea descrescatoare a mediei, si apoi elementele respinse in ordine alfabetica dupa nume. Se afiseaza doar numele, situatia (A/R) si media.

In acest exemplu punem in evidenta o modalitate comoda de selectare a membrilor unei structuri cu ajutorul macrourilor. Macroul Fld selecteaza din zona referita de pointerul P membrul f. Deoarece pointerul P (care poate fi argumentul A sau B al functiei comp) refera o zona de tip void, este necesar mai intii un cast pentru a preciza tipul concret al acesteia. Membrul f poate fi: nm ar md, definiti in cadrul structurii de tip StEl

Deoarece nu stim de la inceput cite linii are fisierul de intrare, sintem nevoiti sa folosim urmatoarea strategie. La inceput alocam pentru tabloul El o zona care sa memoreze NA elemente. Pe masura ce aceasta zona se completeaza, la un moment dat numarul de linii citite coincide cu NA. In acest moment se aloca o zona noua care sa poata memora un numar mai mare de elemente. Desigur, de fiecare data se va actualiza marimea spatiului alocat.

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

#define NA 32

typedef struct StEl;

#define Fld(P,f) ((StEl *)P)->f

int comp(const void *A, const void *B)

return strcmp(Fld(A,nm),Fld(B,nm));

}

int main(int ac, char **av)

fi=fopen(av[1],'rt');

if (!fi)

na=NA; ne=0;

El=(StEl *)malloc(na*sizeof(StEl));

while (fscanf(fi,'%s %d %d %d',

El[ne].nm,&El[ne].na,&El[ne].nb,

&El[ne].nc)!=EOF)

}

fclose(fi);

qsort(El,ne,sizeof(StEl),comp);

for (i=0; i<ne; i++)

printf('%-12s %c%6.2lfn',

El[i].nm,El[i].ar,El[i].md);

free(El);

return 0;

}

3) Se citeste dintr-un fisier text o valoare naturala n. Urmatoarele linii contin n cuvinte, fiecare cuvint avind acelasi numar de litere (cel mult 10). Sa se afiseze cuvintele din fisier ordonate alfabetic.

Pentru a memora lista de cuvinte folosim urmatoarea strategie. In loc sa alocam pentru fiecare cuvint (sir de caractere) citit o zona noua de memorie, alocam de la inceput o zona in care sa putem memora toate cuvintele din lista. Aceasta zona va avea marimea de (l+1)*n octeti, unde l este lungimea fiecarui cuvint (numarul de litere). De ce (l+1) pentru ca trebuie sa memoram si caracterul terminator null.

Avantaje: memoria este utilizata mai eficient daca se aloca de la inceput o zona contigua de dimensiune mai mare, si se reduce foarte mult fragmentarea memoriei.

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

int comp(const void *A, const void *B)

int main(int ac, char **av)

fi=fopen(av[1],'rt');

if (!fi)

fscanf(fi,'%d %s',n,s);

l=strlen(s);

C=(char *)malloc((l+1)*n);

Strcpy(C,s);

for (i=1; i<n; i++)

fscanf(fi,'%s',C+(l+1)*i);

fclose(fi);

qsort(C,n,l+1,comp);

for (i=0; i<n; i++)

printf('%sn',C+(l+1)*i);

free(C);

return 0;

}

Bibliografie

Brian W Kernigham, Dennis M Ritchie - The C Programming Language

Prentice-Hall Software Series, 1978

- Limbajul C; manual de programare

Institutul de tehnica de calcul, Cluj­-Napoca 1984

Herbert Schildt - Manual C complet

Editura Teora, 1998

Manuale electronice

https://www.programmingtutorials.com/c.html

Marshall Brain - Introduction to C Programming

https://devcentral.iftech.com/learning/tutorials/c-cpp/c/

Steve Summit - Introductory C Programming Class Notes

https://www.eskimo.com/~scs/cclass/cclass.html

Steve Summit - Intermediate C Programming Class Notes

https://www.eskimo.com/~scs/cclass/cclass.html

Brian Brown - C Programming

https://www.cit.ac.nz/smac/cprogram/onlinet.htm

Brian Brown - An Introduction to C Programming

https://www.cit.ac.nz/smac/cprogram/default.htm



Document Info


Accesari: 430
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )