Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
PROGRAME SI FUNCTII CU STRUCTURI
EXEMPLE DE PROGRAME SI FUNCTII
E5.1 Functii pentru operatii cu structuri (fara pointeri, cu rezultat
structura).
typedef struct Complex;
// citire numar complex
Complex cit_cx ()
// scriere numar complex
void scr_cx (Complex c)
// adunare numere complexe (cu 2 argumente)
Complex plus_cx (Complex c1, Complex c2)
// verificare functii
main () ,c2, c3;
c2=cit_cx (); scr_cx(c2);
c3=ad_cx(c1,c2);
scr_cx(c3);
E5.2 Operatii cu structuri realizate prin functii 'void' (cu pointeri)
typedef struct Complex;
// citire numar complex
void cit_cx (Complex * px)
// adunare numere complexe
void ad_cx (Complex c1, Complex c2, Complex * pc3)
main () ,c2, c3;
cit_cx (&c2); scr_cx(c2);
ad_cx(c1,c2,&c3);
scr_cx(c3);
E5.3 Ordonare vector de structuri cu functie de comparare structuri
#include <stdio.h>
typedef struct Date;
// comparare de date
int cmpdat ( Date d1, Date d2)
// ordonare vector de date
void sort (Date a[], int n)
} while ( ! gata);
// verificare
void main ()
E5.4 Utilizare structuri pentru reducere numar de argumente la functii
// vectori reprezentati prin structuri
#include <stdio.h>
#define M 100
typedef struct sv Vector;
// citire vector
Vector citvec ( )
// afisare vector
void scrvec (Vector v)
// extrage elemente comune din doi vectori
Vector comun(Vector a, Vector b)
// verificare functii
void main ()
E5.5 Structuri cu continut variabil in timp (uniuni)
#include <stdio.h>
// numar de orice tip
struct number v;
typedef struct number Num;
// afisare numar
void write (Num n)
// citire numar
Num read (char tip)
return n;
// verificare functii
void main ()
Obs. Memorarea unor date de tipuri diferite la o aceeasi adresa se poate
realiza si fara tipul 'union', folosind pointeri de tip 'void *'.
E5.6 Crearea si afisarea unui fisier de articole ce corespund unor structuri
din memorie (cu numele si mediile unor elevi).
// structura articole din fisier
typedef struct Elev;
// creare - afisare fisier de articole
void main ()
E5.7 Cautarea si modificarea unor articole dintr-un fisier de articole.
// structura articole din fisier
typedef struct Elev;
// adaugare articole la sfarsit de fisier
void adaugare (char * numef)
// cautare si modificare articole
void modificare (char * numef)
if ( pos < 0) break;
printf ('noua medie: '); scanf ('%f', &e.medie);
fseek (f,pos,0); // pozitionare pe inceput de articol gasit
fwrite(&e,sizeof(e),1,f); // rescrie articol modificat
} while (eof!=EOF);
fclose (f);
// actualizare fisier existent
void main ()
PROBLEME PROPUSE
P5.1 Functii pentru inmultirea a doua numere complexe si pentru ridicarea
la o putere intreaga a unui numar complex prin inmultiri repetate. Program
pentru calculul valorii (complexe) a unui polinom de variabila complexa,
cu coeficienti numere complexe.
P5.2 Sa se defineasca o structura 'Time' care grupeaza 3 intregi ce
reprezinta ora, minut si secunda pentru un moment (sau un interval) de timp.
Functii pentru citire, scriere si comparare de structuri 'Time'. Functia
de comparare dupa modelul functiei 'strcmp'. Program pentru verificarea
functiilor.
P5.3 Program pentru ordonarea cronologica a unor momente de timp si afisarea
listei ordonate, folosind functii din programul anterior.
P5.4 Sa se defineasca o structura 'Punct' pentru un punct din plan ( cu
doua coordonate x,y de tip 'float') si o structura 'Poligon' pentru un
poligon definit prin numarul de varfuri si un vector de coordonate ale
varfurilor (de tip 'Punct'). Functie pentru calculul distantei dintre
doua puncte din plan. Functie pentru calculul perimetrului unui poligon.
Program pentru calculul perimetrului unui triunghi si unui patrulater.
P5.5 Sa se defineasca o structura 'Vector' pentru un vector alocat dinamic
si extensibil, care contine dimensiunea maxima si dimensiunea efectiva a
vectorului. Functii pentru initializarea unui vector, pentru adaugarea unui
element (cu extindere daca este necesara) si pentru afisarea unui vector de
tip 'Vector'. Tipul elementelor T este neprecizat si poate fi orice tip
predefinit sau definit de utilizator. Program care foloseste functiile.
P5.6 Sa se defineasca o structura 'Per' pentru o pereche cuvant- numar
si o structura 'Dic' pentru un dictionar ca vector de perechi 'Per'.
Program pentru afisarea frecventei de aparitie a unor cuvinte (citite de la
consola) si care foloseste un dictionar de cuvinte si numar de aparitii. Se
va defini si folosi o functie pentru cautarea unui cuvant in dictionar si
adaugarea unei perechi cuvant-numar la dictionar (daca cuvant negasit) sau
modificarea numarului de aparitii (daca cuvant gasit).
P5.7 Sa se defineasca o structura 'Dic' pentru un dictionar compus din doi
vectori: un vector de cuvinte (siruri) si un vector de intregi, plus
dimensiunea lor comuna (vectori cu dimensiune fixa). Program pentru afisarea
frecventei de aparitie a unor cuvinte (citite de la consola) care foloseste
un dictionar de cuvinte si numar de aparitii. Se vor defini functii pentru
adaugarea unei prechi cuvant-numar la dictionar si respectiv pentru cautarea
unui cuvant in dictionar, cu rezultat numar de aparitii sau -1 daca negasit.
P5.8 Sa se defineasca un tip 'Set' ca pointer la o structura ce reuneste
adresa, dimensiunea alocata si dimensiunea efectiva pentru un vector
alocat si realocat dinamic prin care se reprezinta o multime de numere
intregi. Multimea vida are dimensiunea zero. Functii pentru creare multime
vida, adaugare numar la multime, test apartenenta la multime, afisare
multime, comparatie la egalitate, reuniune, intersectie si diferenta de
multimi. Functiile au argumente de tip 'Set'. Program pentru verificarea
acestor functii.
P5.9 Sa se reuneasca operatiile cu fisierul de elevi din exemplele anterioare
intr-un singur program cu mai multe functii si un meniu de alegere a operatiei
afisat pe ecran dupa fiecare operatie. Optiuni meniu: creare, listare,
adaugare la sfarsit, modificare continut, terminare (iesire).
P5.10 Sa se defineasca o structura 'Bon' pentru un bon de vanzare ce contine
numele unui produs (max 30 caractere), cantitatea (un intreg) si valoarea
unei vanzari (un numar neintreg). Program pentru urmatoarele operatii cu
acest fisier: adaugare la sfarsit fisier (cu creare daca nu exista), afisare
integrala fisier, afisare bonuri pentru un produs specificat, cu totalizare
valoare bonuri pe acel produs.
SOLUTII LA PROBLEME PROPUSE
R5.1
// alte functii (citire, scriere, adunare)
// produs de numere complexe
void prod_cx (Complex a, Complex b, Complex* pc)
// ridicare complex la putere intreaga
void put_cx (Complex a, int n, Complex * pc) ; int k;
for (k=0;k<n;k++)
prod_cx (a,c, &c);
*pc=c;
// valoare polinom de variabila complexa
void pol_cx ( int n, Complex c[], Complex x, Complex* rez)
*rez=sum;
// verificare functii
void main ()
R5.2
#include <stdio.h>
// operatii cu momente de timp
typedef struct Time;
// verifica daca timp plauzibil
int corect (Time t)
// citire ora
Time rdtime () while (1);
return t;
// scrie ora
void wrtime ( Time t)
// compara momente de timp
int cmptime (Time t1, Time t2)
main () while (1);
R5.4
// structuri in probleme geometrice : punct, poligon etc.
#include <stdio.h>
#include <math.h>
typedef double Real;
typedef struct Punct;
typedef struct Poligon;
// lungime segment delimitat de doua puncte
Real lung (Punct a, Punct b)
// calcul primetru poligon
Real perim ( Poligon p)
// verificare
void main ()
R5.5
#include <stdio.h>
#include <stdlib.h>
#define INCR 100 // cu cat creste vectorul
typedef int T; // tip componente vector
typedef struct vf Vector;
// initializare vector
void initVec (Vector * v)
// adaugare element la vector
void addVec ( Vector * v, T x)
v->vec[v->dim]=x; v->dim ++;
// afisare vector
void printVec ( Vector v)
// afisare valoare de tip T
void printT (T x)
// creare si afisare vector
void main()
R5.6
// frecventa de aparitie a cuvintelor, cu vector de structuri
#include <stdio.h>
#include <string.h>
#define MAXL 16 // nr maxim de litere dintr-un cuvant
#define MAXW 1000 // nr. maxim de cuvinte}
typedef struct Per; // pereche cuvint-numar
typedef struct Dic;
void initDic (Dic * d)
void printDic (Dic d)
// cautare/adaugare in dictionar
void addDic (Dic * d, char* w)
else // daca este o alta aparitie a unui cuvint
d->tc[i].na ++; // incrementare nr de aparitii
// creare si afisare dictionar
void main ()
R5.7
// dictionar ca structura cu doi vectori
#include <stdio.h>
#include <string.h>
#define MAXL 16 // nr maxim de litere dintr-un cuvant
#define MAXW 1000 // nr. maxim de cuvinte
typedef struct Dic;
// initializare
void initDic (Dic * d)
// afisare dictionar
void printDic (Dic d)
// pune pereche cheie-valoare in dictionar
void putDic (Dic * d, char* cuv, int n)
else // cheie existenta
d->tf[i]=n;
// citire valoare asociata unei chei date
int getDic (Dic d, char * cuv)
// creare si afisare ductionar
void main ()
R5.8
#include <stdio.h>
#include <stdlib.h>
#define M 10 // dimensiune initiala multime
typedef struct set * Set;
// initializare multime vida
void init (Set a)
// test daca o valoare data apartine unei multimi
int contine (Set a, int x)
// adaugare element la o multime
void plus (Set a, int x)
a->val[ a->n]=x; // adauga elem la multime
a->n ++; // creste numar de elemente din multime
// afisarea elementelor unei multimi
void scrie (Set a) n');
// reuniune de multimi
void plusm (Set a, Set b, Set c)
// intersectie de multimi
void inters (Set a, Set b, Set c)
// diferenta de multimi a-b
void minusm (Set a, Set b, Set c)
// citire valori si creare multime
void citmul (Set a) while (x);
// program principal
void main ()
R5.10
#include <stdio.h>
#include <assert.h>
#include <string.h>
// structura articole fisier
typedef struct Bon;
// adaugare bonuri la sfarsit de fisier (si creare fisier)
void adaugare (char * numef)
else
f=fopen (numef,'ab'); // pozitionare pe afarsit de fisier
puts ('Introducere bonuri si creare fisier n');
printf (' nume, cantitate, valoare : nn');
while (scanf ('%s %d %ld ',b.nume, &b.cant, &b.val) != EOF)
fwrite(&b,sizeof(b),1,f);
fclose (f);
// afisarea tuturor bonurilor din fisier
void listare (char* numef)
// afisare si totalizare bonuri pentru un produs dat
void total (char * numef)
printf (' Valoare totala = %ldn', sum);
fclose (f);
// afisare meniu si tratare optiuni
void main ()
getchar(); // pentru mentinere rezultate
} while ( opt[0] != 'x');
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre:
|
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |