solutii la probleme propuse

34
SOLUTII LA PROBLEME PROPUSE // R3.1 // determinare nr de cifre la p.intreaga a unui nr. dat int digits (double x) return nc; } // varianta mai simpla ptr functia digits int digits(double x) // afisare vector de numere cu tabelare automata void main () // printf ("nr. max. cifre=%d \n",max); // afisare vector nv=80/(max+1); // nr. maxim de coloane for ( i=0;i<n;i++) } // R3.2 // verifica daca este numar prim int prim ( int n)

Upload: crystynyk4alin

Post on 12-Aug-2015

110 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Solutii La Probleme Propuse

SOLUTII LA PROBLEME PROPUSE

// R3.1

// determinare nr de cifre la p.intreaga a unui nr. dat

int digits (double x)

return nc;

}

// varianta mai simpla ptr functia digits

int digits(double x)

// afisare vector de numere cu tabelare automata

void main ()

// printf ("nr. max. cifre=%d \n",max);

// afisare vector

nv=80/(max+1); // nr. maxim de coloane

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

}

// R3.2

// verifica daca este numar prim

int prim ( int n)

// verif. ipotezei lui Goldbach

main ()

// R3.3

Page 2: Solutii La Probleme Propuse

// factorul de multiplicitate al lui b in a

int mult (int a, int b, int * c)

*c=a;

return k;

}

// descompunere in factori primi

void main ()

printf("\n");

}

// varianta pentru functia "mult" (cu alt mod de folosire)

void mult (int a, int b, int * m, int *c)

*c=a; *m=k;

}

// R3.4

// determina pozitie maxim in vector de numere

int imax ( float x[], int n)

// ordonare vector

void sort ( float x[], int n)

}

// verificare

void main () ;

int i, n = sizeof(t)/sizeof(t[0]);

Page 3: Solutii La Probleme Propuse

sort (t,n);

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

printf ("%.2f ",t[i]);

}

// R3.5

#include <stdio.h>

#include <math.h>

// semn numar algebric = -1 sau 1 sau 0

int sign (int x)

// determinare cadran

int cadran ( int x, int y)

}

// verificare functii

void main () while (1);

}

// R3.6

// cautare binara, nerecursiva

int caut(int b,int a[],int i,int j)

return -1;

}

// cautare binara, recursiva

Page 4: Solutii La Probleme Propuse

int caut(int b,int a[],int i,int j)

}

// R3.7

// operatii cu multimi de biti

#include <stdio.h>

#define DIM 16

typedef unsigned int Set[DIM];

// initializare multime vida

void init (Set m)

// adauga la multimea m valoarea x

void add (Set m,int x)

// reuniune de multimi ( c=a+b)

void or (Set a, Set b, Set c)

// intersectie de multimi (c=a&b)

void and (Set a, Set b, Set c)

// diferenta simetrica de multimi

void xor (Set a, Set b, Set c)

// diferenta de multimi (c=a-b)

void dif (Set a, Set b, Set c)

// verifica aparteneta la multimea m a lui x

int is (Set m,int x)

// afisarea multimii m

Page 5: Solutii La Probleme Propuse

void print (Set m)

\n");

}

// verificarea unor functii

main()

// R3.8

// operatii cu multimi reprezentate prin vectori neordonati

#include <stdio.h>

#define M 256 // dimensiune maxima vectori (multimi)

// initializare multime vida

void init (int a[])

// test daca o valoare data apartine unei multimi

int contine (int a[], int x)

// dimensiunea (cardinalul) unei multimi

int dim (int a[])

// adaugare element la o multime

void plus (int a[], int x)

// eliminare valoare data dintr-o multime

void minus (int a[], int x)

}

// afisarea elementelor unei multimi

void scrie (int a[])

printf (" } \n");

Page 6: Solutii La Probleme Propuse

}

// reuniune de multimi

void plusm (int a[],int b[], int c[])

// intersectie de multimi

void inters (int a[],int b[], int c[])

// diferenta de multimi a-b

void minusm (int a[], int b[], int c[])

// comparatie la egalitate multimi

int egal (int a[], int b[])

// citire multime vector

int citmul (int a[]) while (a[i-1]);

return i;

}

// verificare functii

void main ()

// R3.9

#include <stdio.h>

// calcul valoare polinom ptr un x dat

long valPol ( int c[], int n, int x)

// vector cu divizorii unui intreg dat (pozitivi si negativi)

int div (int n, int d[])

return j;

Page 7: Solutii La Probleme Propuse

}

// impartire polinom prin x-r

void impPol (int a[],int n, int b[], int r)

// radacini intregi ec. polinomiala

void main ()

}

} while (nr>0);

// scrie coeficienti polinom fara radacini intregi

// return ;

if (n >1)

}

// R3.10

#include <stdio.h>

// Interpolare Lagrange

float lagrange ( float x[], float y[], int n, float xx)

return s;

}

// program principal

void main ()

// creare vector de n-1 puncte prin interpolare

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

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

Page 8: Solutii La Probleme Propuse

printf ("%f %f \n", xm[i],ym[i]);

}

// R3.11

#include <stdio.h>

// produs dintre un polinom si un binom

// (a[n]+a[n-1]*x+...+a[0]*x^n)(x+c) = b[n+1]+b[n]*x+...+b[0]*x^(n+1)

int prodpoli (int a[], int n, int c, int b[])

// calcul produs (x+c[0])*(x+c[1])* ...(x+c[n-1])=b[n]+b[n-1]*x+...+b[0]*x^n

void produs (int c[], int n, int b[])

}

// verificare functii

void main ()

// R3.12

int cmmdc (int a,int b)

// R3.13

// recursiv

void binar (int n)

else

printf("0");

}

// iterativ (cu vector)

Page 9: Solutii La Probleme Propuse

void binar2 ( int n)

printf ("%d\n",i);

// scrie vector in ordine inversa

while (i>0)

printf ("%d",c[--i]);

}

// R3.14

// cautare secventiala recursiva intr-un vector

int lsearch (int a[], int n, int b)

// R3.15

#include <stdio.h>

#define M 20 // dimensiuni matrice

typedef float num;

typedef num mat[M][M]; // definire tip "mat"

// generare matrice unitate

void matunit ( mat u,int n)

// produs matrice patratice

void prodmat ( mat a, mat b, mat c,int n)

// copiaza din t in c

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

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

c[i][j]=t[i][j];

Page 10: Solutii La Probleme Propuse

}

// afisare matrice

void scrmat (mat a, int n)

}

// ridicare la putere matrice

void expmat (mat a,int n,int k, mat p)

// verificare functii

void main () ,,};

mat b,c ;

matunit(b,n);

prodmat (a,b,a,n);

scrmat (a,n);

// ridicare la putere matrice

expmat (a,n,2,c);

scrmat(c,n);

}

// R3.16

#include <stdio.h>

#define M 10 // nr maxim linii/coloane

typedef float mat[M][M];

// schimba intre ele doua linii dintr-o matrice patratica

void schimb ( mat a, int n, int i, int j)

}

Page 11: Solutii La Probleme Propuse

// aducere valori nenule pe diagonala unei matrice patratice

// rezultat 1 daca a reusit si 0 daca nu a reusit

int transf (mat a, int n)

if (gasit) continue;

else return 0;

}

return 1;

}

// verificare functie

void main ()

i=transf (a,n); // transforma matricea a

if (i==0)

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

}

SOLUTII LA PROBLEME PROPUSE

// R4.1

// lungime sir terminat cu zero

int strlen ( char * s)

// copiaza sir la adresa d de la adresa s

char * strcpy ( char * d, char * s)

Page 12: Solutii La Probleme Propuse

// concatenare sir s in prelungirea sirului d

char * strcat (char * d, char * s)

// cauta un caracter c intr-un sir d

char * strchr (char * d, char c)

// cauta ultima aparitie a lui c in sirul d

char * strrchr (char * d, char c)

// comparare de siruri

int strcmp ( char * s1, char * s2) while ( *s1++ && *s2++);

return 0; // siruri egale pe toata lungimea

}

// cauta sirul s in sirul d

char * strstr ( char *d, char * s)

if ( *ps == 0)

return d;

else

++d;

}

return 0;

}

// R4.2

// echivalenta cu "strncpy"

char * stcpy (char* d, char * s,int n)

Page 13: Solutii La Probleme Propuse

*d=0; return dd;

}

// echivalenta cu "strncat"

char * stcat (char* d, char * s,int n)

*d=0; return dd;

}

// echivalenta cu "strncmp"

int stcmp ( char * d, char *s, int n)

if (n==0 || (*d==0 && *s==0) )

return 0; // siruri egale

else

if (*d < *s)

return -1;

else

return 1;

}

// R4.3

/* sterge n caractere de la adresa d */

void strdel (char *d, int n)

// insertie sir s la adresa d

void strins (char *d, char *s)

// varianta de insertie sir

void strins (char *d, char *s)

Page 14: Solutii La Probleme Propuse

// alta varianta de insertie sir s la adresa d

void strins (char *d, char *s)

// R4.4

// inlocuieste in txt toate apritiile lui s1 prin s2

void main ()

puts (txt); // afisare text dupa inlocuire

}

// R4.5

// extragere subsiruri dintr-un sir (var.1)

void data (char * d, int r[3])

// extragere subsiruri dintr-un sir (var. 2)

void data (char *d, int r[])

// verificare

void main ()

// R4.6

// afisare si numarare cuvinte

// (a) cu "strtok"

main ()

printf ("%d atomi \n", nt);

}

Page 15: Solutii La Probleme Propuse

// afisare si numarare cuvinte (atomi)

// (b) cu "sscanf"

main ()

printf ("%d atomi \n", nt);

}

// R4.7

char *strtok2 (char * sir,char *separ, char * tok)

}

// afisare si numarare cuvinte (atomi)

main ()

printf ("%d atomi \n", nt);

}

// R4.8

// extrage de la adresa adr un sir de litere la adresa rez

char * nextword ( char * adr, char * rez)

// R4.9

// frecv de utilizare a unor cuvinte cheie

#include <stdio.h>

#include <string.h>

#include <ctype.h>

// cauta in tabel de cuv cheie

int keyw ( char * nume, char * kw[], int n )

Page 16: Solutii La Probleme Propuse

// extrage de la adresa adr un cuvint la adresa rez

char * next ( char * adr, char * rez)

void main () ;

int nr[5]=; // nr de aparitii ptr fiecare cuvint

int k,lc,n=5; // lungime vectori kw si nr

printf ("nume fisier: "); scanf("%s",buf);

f=fopen (buf,"r");

if (f==NULL)

while ( fgets(buf,128,f)!=0 )

}

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

printf ("%8s = %d \n",kw[k],nr[k]);

}

// R4.10

// compara doua siruri dupa cuvantul k din sir (k=0,1,..)

int compar ( char * a, char * b, int k)

return strcmp(w1,w2);

}

// ordonare linii din fisier text dupa orice cuvant din linie

void main ( int argc, char * argv[])

} while (!gata);

Page 17: Solutii La Probleme Propuse

// afisare fisier ordonat

puts("");

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

printf("%s",tlin[k]);

}

// R4.11

typedef char word[30]; // un cuvint

// functie care cauta un sir intr-un vector de siruri

int caut ( word w, word t[], int n)

// program principal

void main () {

FILE * f; char numef[50]; // nume fisier text

word cuv[300]; // tabel de cuvinte

int nr[300]=; int n,k,lc;

char linie[80], * adr, *sep=" \t\n";

puts("Nume fisier:"); gets(numef);

f=fopen(numef,"r"); //deschide fisier

n=0; // nr de cuvinte in vector

while ( fgets(linie,80,f) != 0)

adr=strtok(0,sep); // urmatorul cuvant

}

}

// afisare rezultate

Page 18: Solutii La Probleme Propuse

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

if ( nr[k] > 1)

printf ("%s %d \n", cuv[k],nr[k]);

}

// R4.16

// conversie din HTML in text ASCII

#include <stdio.h>

#include <string.h>

void main ()

tag=0;

while ( fgets(hline,132,html) )

}

*p2=0;

fputs (tline,text);

}

fclose(text);

}

SOLUTII LA PROBLEME PROPUSE

Page 19: Solutii La Probleme Propuse

// R5.1

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

Page 20: Solutii La Probleme Propuse

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

Page 21: Solutii La Probleme Propuse

#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

Page 22: Solutii La Probleme Propuse

#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)

Page 23: Solutii La Probleme Propuse

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

Page 24: Solutii La Probleme Propuse

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>

Page 25: Solutii La Probleme Propuse

// 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 : \n\n");

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 = %ld\n", sum);

fclose (f);

}

// afisare meniu si tratare optiuni

void main ()

getchar(); // pentru mentinere rezultate

} while ( opt[0] != 'x');

Page 26: Solutii La Probleme Propuse

}

SOLUTII LA PROBLEME PROPUSE

// R6.5

#include <stdio.h>

#include <stdlib.h>

// definire tip Set

typedef struct * Set;

// initializare multime de n elemente

void init (Set m, int n)

// adauga un element la multime

void addelem (Set m,int el)

// adunare (reuniune) multimi

void add (Set a, Set b, Set c)

// intersectie de multimi

void inters (Set a, Set b, Set c)

// apartenenta la multime

int este(Set m,int el)

// nr de elemente in multime

int size ( Set m)

// afisare multime

Page 27: Solutii La Probleme Propuse

void printset(Set m) \n");

}

// copiere multime

void clone ( Set a, Set c)

// verificare functii

void main()

// R6.6

// numere lungi ca sir de cifre bcd (o cifra pe octet)

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

typedef char* bcd;

// conversie din ascii in bcd

bcd asc_bcd (char a[])

// conversie din bcd in ascii

void bcd_asc (bcd b, char a[])

// adunare de numere bcd

bcd add_bcd (bcd b1, bcd b2)

if (t)

return b3;

}

// verificare functii

Page 28: Solutii La Probleme Propuse

void main () while (1);

}

// R6.7

#include <stdio.h>

#include <stdlib.h>

typedef struct Elem;

typedef struct Mat;

// citire matrice rara

void readMat ( Mat * p)

}

// afisare integrala matrice rara

void printMat (Mat * p)

else

printf ("%6.2f ",0);

printf("\n");

}

}

void main ()