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:
|