Set 5
Rezolvare:
#include<stdio.h> #include<conio.h> float putere4(float x); void main() float putere4(float x) |
Rezolvare:
#include<stdio.h> #include<conio.h> int min(int a[50], int n) return min; void main() printf("elementul minim din tablou este: %d", min(a, n)); getch(); |
Rezolvare:
Rezolvare:
#include<stdio.h> #include<conio.h> int sumacifre(int x) return s; void main() |
Rezolvare:
#include<stdio.h> #include<conio.h> int cifrax(int x, int y) rez=x%10; return rez; void main() |
Rezolvare:
#include<stdio.h> #include<conio.h> int continen(int x, int y) x/=10; } return rez; void main() n/=10; } } getch(); |
Rezolvare:
#include<stdio.h> #include<conio.h> int puteren(int x, int y) void main() |
Set 7
Rezolvare:
#include<stdio.h> #include<conio.h> int fib(int x) void main() |
Rezolvare:
#include<stdio.h> #include<conio.h> //recursiv int hermrec(int x, int y) //iterativ int hermiter(int x, int y) return rez; void main() |
Set 9
Aici nu voi rezolva un exemplu din set ci va voi da un exemplu mai complex care acopera majoritatea operatiilor cu liste si totodata voi folosi si operatii pe siruri de caractere.
Exemple de lucru cu liste dublu īnlantuite. Consideram urmatoarea definitie care reprinzinta un element al listei:
typedef struct mystruct elem; |
Primul element al listei va fi tinut īntr-o variabila globala. De asemenea fiecare nod va contine numarul de ordine īn care a fost inserat.
//declar primul element al listei global elem *top = NULL; //ordinea de inserare este tinuta īn variabila globala int order = 1; |
1. Inserare īnainte de nodul primit ca parametru:
Rezolvare:
/* inserare īnaintea elementului primit ca parametru cu text static "textStatic" */ elem * insertB(elem *nod) else |
2. Inserare la īnceputul listei:
Rezolvare:
//inserare la īnceputul listei cu text primit ca parametru //se va modifica top void insertB(char *varText) else |
3. Inserare dupa de nodul primit ca parametru:
Rezolvare:
//inserare dupa element primit ca parametru cu text static "textStatic" elem * insertA(elem *nod) else |
4. Inserare la sfārsitul listei:
Rezolvare:
//inserare la sfārsitul listei cu text primit ca parametru //daca lista este goala se va modifica top void insertA(char *varText) else |
5. stergere a unui nod primit ca parametru:
Rezolvare:
//sterge element primit ca parametru => daca este primul element se modifica top void sterge(elem *nod) //daca este ultimul element al listei if(nod->next == NULL) //daca este un nod oarecare if(nod->prev != NULL && nod->next != NULL) |
6. stergere de noduri care contin ca informatie utila textul primit ca parametru:
Rezolvare:
//sterge toate elementele din lista care contin stringul primit ca parametru //=> daca primul element se gaseste printre aceste elemente se va modifica top void sterge(char *varText) //daca este ultimul element al listei if(temp->next == NULL) //daca este un nod oarecare if(temp->prev != NULL && temp->next != NULL) temp = temp->next; |
7. Afisare lista de la nodul primit ca parametreu pāna la ultimul nod:
Rezolvare:
//afisare lista de la nodul primit ca parametru void afisare(elem *nod)while(nod != NULL); else printf("\nNici un element de afisat!"); |
8. Afisare elemente din lista care contin ca informatie utila testul primit ca parametru:
Rezolvare:
//afisare elemente din lista care contin stringul primit ca parametru pornid de la nodul //primit ca parametru void afisare(elem *nod, char *varText) nod = nod->next; }while(nod != NULL); printf("\nLista contine %d elemente!",found); else printf("\nNici un element de afisat!"); |
Fisiere
Exemplu de sortare a informatiilor continute īntr-un fisier binar. Avem un fisier binar īn care memoram informatiile despre angajatii unei inteprindri. Informatia despre un angajat va fi reprezentata folosind o definitie de tip structura (PERSOANA). Analizānd datele problemei se observa ca volumul de date este voluminos si ele sunt introduse aleator īn fisier, nu ordonate dupa un anumit criteriu. Se doreste sortarea informatiei īn ordinea alfabetica a numelor angajatilor si afisarea acestora.
Pentru a īndeplinii operatia de sortare, daca se foloseste o abordare directa si datele sunt aduse īn īntregime īn memoria interna, vor fi sortate si rescrise pe disc, eventual īn alt fisier sau īn acelasi redenumit, va fi necesar un numar mare de operatii si se va folosii multa memorie. Daca volumul datelor este foarte mare este posibil sa nu avem suficienta memorie pentru a le prelucra pe toate odata si atunci ele vor trebui prelucrate pe bucati. De asemenea daca se doreste sortarea dupa un alt criteriu trebuiesc reluate operatiile de la capat. Īn concluzie o astfel de abordare nu este eficienta pentru ca are o serie de probleme de prelucrare.
Din aceste considerente se va adopta o solutie care nu modifica datele din fisier ci creaza un fisier ajutator pe care īl vom numi fisier index. Pentru a realiza sortarea se va citi numai acea parte din īnregistrare īn raport cu care se face sortarea, pe care o vom numi "cheie" - īn cazul nostru va fi numele persoanei. Fiecarei chei i se va asocia un pointer, numit "index", ce arata pozitia pe care o ocupa īnregistrarea completa īn fisierul de date (original). Īn continuare se va face sortarea perechilor index-cheie īn ordine alfabetica a cheilor (numelor). Perechile index-cheie pot fi reprezentate folosind o definitie de tip structura (INDEX) care are 2 cāpuri - pozitia īnregistrarii īn fisierul original si cheia (cāmpul din īnregistrare dupa care se face sortarea). Dupa sortare ele vor fi memorate īn fisierul index.
Pentru o mai buna īntelegere a metodei descrise mai sus sa consideram urmatorul mic exemplu:
Gheorghiu Florin 21 01 1980 Ploiesti
Toma Ion 03 11 1974 Resita
Alexandrescu Victor 15 03 1954 Tīrgoviste
Botez Cristian 11 11 1960 Bucuresti
Gheorghiu Florin
Toma Ion
Alexandrescu Victor
Botez Cristian
Alexandrescu Victor
Botez Cristian
Gheorghiu Florin
Toma Ion
Rezolvare:
/*program pentru scrierea informatiilor in fisierul binar*/ #include <stdlib.h> #include <stdio.h> #include <string.h> #define LUNG_NUME 20 typedef struct PERSOANA; void main(void) printf("introduceti date de la tastatura:\n"); printf("Cate persoane inregistrati?: "); scanf("%d", &n); for (i=1; i<=n;i++) fclose(f); |
/*program pentru citirea informatiilor din fisierul binar*/ #include <stdlib.h> #include <stdio.h> #include <string.h> #define LUNG_NUME 20 typedef struct PERSOANA; void main (void) fseek(f,0L,2); n=ftell(f)/sizeof(PERSOANA); fseek(f,0L,0); for (i=1; i<=n;i++) fclose(f); |
/* program pentru sortare index-cheie */ #include <stdlib.h> #include <stdio.h> #include <string.h> #define LUNG_NUME 20 typedef struct PERSOANA; typedef struct INDEX; int constr_tablou_index (FILE *fis, INDEX tabl[], int nr_max) return nr_gasite; /*compara 2 elemente de tip INDEX*/ int compara (const void * a, const void *b) /*sorteaza tabloul index ce are "nr" elemente cu "QSORT"*/ void sort_tablou (INDEX tabl[], int nr) /*citeste inf. din fis. original si le scrie pe ecran in ordinea indicata de tabloul index sortat cnform criteriului stabilit*/ void scrie_inf_din_fisier (FILE *fis, INDEX tabl[], int val_max_indice) /*functia "main"*/ #define NR_MAX_COMPONENTE 100 void main (void) nr_inreg_citite=constr_tablou_index (fisier,tabl,NR_MAX_COMPONENTE); sort_tablou(tabl,nr_inreg_citite); scrie_inf_din_fisier(fisier,tabl,nr_inreg_citite); |
Observatii:
|