Documente Academic
Documente Profesional
Documente Cultură
#include<stdio.h>
main()
{
int numar;
numar=1;
printf("\nProgramul exemplifica structura unui program.\n");
printf("%d este primul numar \n",numar);
}
________________________________________________________________________
/* Exemplificare structura program C */
#include<stdio.h>
main()
{
int numar;
numar=1;
printf("%d este primul numar \n",numar);
}
________________________________________________________________________
/* exemplul 1b, de program simplu, in C */
#include <stdio.h>
main()
/* un program simplu */
{
int
num;
/* se defineste variabila num */
num = 1;
/* se initializeaza variabila num cu valoarea 1 */
printf("\nEste un simplu "); /* utilizarea functiei printf() */
printf("exemplu de program.\n");
printf("Numarul favorit este %d, deoarece ");
printf("este primul.\n", num);
}
________________________________________________________________________
/* Programul afiseaza doar un simplu mesaj de salut */
#include <stdio.h>
main()
{
printf(" S A L U T !\n");
}
________________________________________________________________________
/* Exemplu de program simplu si structura sa, in C++ */
se afiseaza: Un exemplu de program simplu C++
1 este primul numar
*/
#include <iostream.h>
#include <conio.h>
void main(void)
{
int numar;
numar = 1;
cout << endl;
cout << "Un exemplu de program simplu C++; afisarea unui numar :"
<< endl;
cout << numar << " este primul numar" << endl;
getch();
}
________________________________________________________________________
/* Programul exemplifica utilizarea a unui sir de caractere*/
#include <stdio.h>
#define SIR "daca asta ti-e numele"
main ( )
{
char nume[50];
printf("\nProgramul exemplifica citirea/scrierea unui sir de caractere.\n");
printf("Cum te cheama ?\n");
scanf("%s", nume);
/* descriptorul %s citeste o data de tip sir de caractere*/
printf("Salut, %s , %s !\n", nume, SIR);
}
________________________________________________________________________
/* Programul exemplifica utilizarea unui sir de caractere, si a unor functii */
#include <stdio.h>
#include <string.h>
#define SIR "Am retinut numai numele."
main ( )
{
char nume[50];
printf("\nProgramul exemplifica citirea/scrierea unui sir de carcatere,\n"
"precum si spatiul de memorie ocupat de un sir de caractere.\n");
printf("Cum te cheama ?\n");
scanf("%s", nume);
printf("Salut, %s !. %s \n", nume, SIR);
printf("Numele are %d litere, si ocupa %d octeti.\n",
strlen(nume), sizeof nume);
printf("Propozitia \"SIR\": \"%s\"\n\tare %d litere, si ocupa %d octeti.\n",
SIR , strlen(SIR), sizeof (SIR));
}
________________________________________________________________________
/* Programul calculeaza varsta in luni, pentru o varsta data in ani si luni */
#include <stdio.h>
main ( )
{
int ani, luni, ani_l ; /* se definesc aceste variabile */
p2 = p1;
/* pointerului p2 i se atribuie aceeasi valoare cu p1 */
printf("i1 = %i, i2 = %i, *p1 = %i , *p2 = %i , dupa instructiunile: "
"p1=&i1, p2=p1.\n", i1, i2, *p1, *p2);
printf ("p1 = %p, p2 = %p, valori tiparite cu specificatorul p\n", p1, p2);
printf ("p1 = %x, p2 = %x, valori tiparite cu specificatorul x\n", p1, p2);
}
________________________________________________________________________
/* programul care realizeaza conversia unui numar binar -> la intreg */
#include <stdio.h>
main()
{
char car;
int
val = 0;
printf ("\nProgramul realizeaza conversia din binar la intreg zecimal.\n");
printf ("Introduceti un numar binar:");
scanf ("%c", &car);
while (car == '0' || car == '1' )
{
val = val*2 + (car & 1);
scanf ("%c", &car);
}
printf ("Valoarea zecimala (intreaga) este: %d\n", val);
}
________________________________________________________________________
/* Programul determina relatia de precedenta dintre doua numere
utilizand operatorul conditional ? : */
#include <stdio.h>
main()
{
float a,b;
printf("\nProgramul determina relatia de precedenta dintre 2 numere.\n");
printf("Introduceti doua numere:");
scanf("%f%f",&a,&b);
printf("%f %c %f\n",a,a<b ? '<': a>b ? '>' : '=',b);
}
________________________________________________________________________
/* Programul determina maximul dintre doua numere utilizand
operatorul conditional ? :
*/
#include <stdio.h>
main()
{
float a,b,max;
printf("\nProgramul determina maximul dintre doua numere.\n");
printf("Introduceti doua numere:");
scanf("%f%f",&a,&b);
max = a >= b ? a : b;
}
printf ("\n");
do
{
printf ("Introduceti numar (pozitiv si <999, sau -1 pt. oprire):");
scanf ("%d", &numar);
}
while ( numar < -1 || numar > 999 );
}
/* while */
}
/* sfarsit main */
________________________________________________________________________
/* Programul determina pentru doua puncte din plan, specificate prin
coordonatele lor (x1,y1) si (x2,y2), daca sunt:
- in acelasi cadran,
- pe prima sau a doua bisectoare,
- simetrice fata de origine, sau
- simetrice fata de abscisa;
*/
#include <STDIO.H>
main()
{
float x1,y1,x2,y2;
printf("\nProgramul determina pozitia in plan a doua puncte:\n"
"\tin acelasi cadran, pe prima sau pe a doua bisectoare,\n"
"\tsimetrice fata de origine sau de abscisa.\n");
printf("Introduceti coordonatele celor doua puncte:\n");
printf("Punctul A ( coord.:x1,y1 ):");
scanf("%f %f",&x1,&y1);
printf("Punctul B ( coord.:x2,y2 ):");
scanf("%f %f",&x2,&y2);
if ( x1*x2>0 && y1*y2>0 )
printf("Cele doua puncte sunt in acelasi cadran\n");
else
printf("Cele doua puncte nu sunt in acelasi cadran\n");
if ( x1 == y1 && x2 == y2 )
printf("Cele doua puncte sunt pe prima bisectoare\n");
else if ( x1 == -y1 && x2 == -y2 )
printf("Cele doua puncte sunt pe a doua bisectoare\n");
if ( x1 == -x2 && y1 == -y2 )
printf("Cele doua puncte sunt simetrice fata de origine\n");
if ( y1 == -y2 && x1 == x2 )
printf("Cele doua puncte sunt simetrice fata de abscisa\n");
}
/* Programul determina cel mai mare divizor comun pentru doua numere
a,b pozitive */
#include<stdio.h>
void main()
{
int a, b, rest;
printf ("\nIntroduceti doua numere intregi:\n");
scanf ("%d %d", &a, &b);
while (b)
{
rest = a % b;
a = b;
b = rest;
}
printf ("Cel mai mare divizor este: %d\n", a);
}
________________________________________________________________________
/* Se realizeaza conversia unui numar intreg intr-o baza oarecare - 2..36 */
#include <stdio.h>
#define LUNG_MAX 32
void main ()
{
char cifra[LUNG_MAX];
int numar, baza, indice;
printf ("\nNumar de convertit: ");
scanf ("%d", &numar);
printf("In baza: ");
scanf ("%d", &baza);
indice = 0;
printf("Numarul %d in baza \"%d\" este: ", numar, baza);
if ( numar < 0 )
{
printf("-");
numar = - numar;
}
do
{
if ( numar % baza < 10 )
cifra[indice] = '0' + numar % baza;
else
cifra[indice] = 'A' + numar % baza - 10;
numar /= baza;
indice++;
} while(numar>0);
for ( indice-- ; indice >= 0 ; indice-- )
printf("%c", cifra[indice]);
printf("\n");
}
else
zi++;
/*scrie rezultatul obtinut*/
printf("Data curenta(zi/luna/an) este: %2d-%2d-%4d\n",zi,luna,an);
}
________________________________________________________________________
/* Program de rezolvare a ecuatiei de gradul II */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
double a, b, c, delta, real, imag;
printf ("Introduceti coeficientii ecuatiei de gradul al doilea:\ "
"\n\t\t ( ax^2+bx+c=0 )\na=");
scanf ("%lf", &a);
printf ("b=");
scanf ("%lf", &b);
printf ("c=");
scanf ("%lf", &c);
if (a)
{
delta = pow (b,2) - 4*a*c;
real = -b/2/a;
imag = sqrt(fabs(delta))/2/a;
if (delta >= 0)
printf ("X1=%5.2lf , X2=%5.2lf\n", real-imag, real+imag);
else
printf ("X1=%5.2lf-i*(%5.2lf), X2=%5.2lf+i*(%5.2lf)\n",
real, imag, real, imag);
}
else
if(b)
printf ("Ecuatia de grad I cu solutia X=%5.2lf\n", -c/b);
else
printf ("Ecuatie degenerata\n");
}
________________________________________________________________________
/* Program ce afiseaza (genereaza) numerele prime in intervalul [3,n];
intervalul este parcurs cu un pas egal cu 2, deoarece numerele prime
sunt numai printre numerele impare
*/
#include<stdio.h>
void main()
{
long int n, i, div, este_prim, contor_np=2;
printf ("\nAfiseaza numerle prime pana la n=");
case 'u':
nr_u++;
break;
}
}
printf ("Numarul de vocale\n A, E, I, O
, U, din text "
"este:\n%5d %5d %5d %5d %5d\n",nr_a, nr_e, nr_i, nr_o, nr_u);
}
________________________________________________________________________
/* programul determina daca un numar este par sau nu */
#include <stdio.h>
main()
{
int numar, rest;
printf("\nProgramul determina daca un numar intreg este par sau nu.\n");
printf ("Introduceti numarul:");
scanf ("%d", &numar);
rest = numar % 2;
if (rest )
printf ("Este numar impar\n");
else
printf ("Este numar par\n");
}
________________________________________________________________________
/* Programul calculeaza puterea intreaga a unui numar real, x^n,
utilizand un numar minim de inmultiri de numere reale */
#include <stdio.h>
#include <math.h>
void main()
{
int n,ni, p=1, nr_inmult=0; /* p=cea mai mica putere a lui 2 mai mare ca n*/
int
semn; /* memoreaza semnul lui n */
double x, y=1; /* y = x^n, nr_inmult = numarul de inmultiri efectuate */
printf ("\nSe calculeaza x^n, utilizand un numar minim de inmultiri.\n");
printf ("x (real) = "); scanf ("%lf", &x);
printf ("n (intreg) = "); scanf ("%d", &n);
ni = n;
semn = n < 0;
n = abs ( n );
while ( p <= n )
p = p * 2;
do
{
p = p / 2;
y = y*y;
nr_inmult++;
if ( n >= p )
{
n = n - p;
y=y*x;
nr_inmult++;
}
} while ( p > 1 );
if ( semn )
y=1/y;
printf("x^n = %e, utilizand %d inmultiri .\n", y, nr_inmult);
printf("Rezultatul obtinut cu functia \"pow(x,n)\" = %f (dupa "
"%d inmultiri)\n", pow(x,ni), ni);
}
________________________________________________________________________
/* Calculeaza radacina patrata a unui numar real, folosind sirul
definit prin relatia de recurenta Heron: Xn=(Xn-1+a/Xn-1)/2, Xo=a/2 */
#include <stdio.h>
#include <math.h>
#define MAX_TERMENI 100
void main()
{
double radacina, a, precizia, modul;
int n=0;
printf ("\nCalculeaza radacina patrata a unui numar real (ca limita a "
"sirului Heron).\n");
printf ("Introduceti numarul: ");
scanf ("%lf", &a);
if (a < 0)
printf ("Nu se poate calcula radical dintr-un numar negativ\n");
else
if (a == 0)
printf ("Radacina este 0\n");
else
{
radacina = a/2;/* initializare */
precizia = a/1E+15; /*valoarea preciziei*/
do
{
radacina = (radacina + a/radacina)/2;
modul = a - radacina*radacina;
if (modul < 0)
modul = -modul;
n++;
}
while ( modul > precizia && n < MAX_TERMENI);
printf ("Radacina patrata din %g este %f obtinuta "
"dupa %d iteratii\n", a, radacina, n);
}
printf("Suma factorialelor este: %li\n", suma);
}
________________________________________________________________________
/* Calculeaza pana la o limita specificata suma seriei:
1 + 1/2 + 1/3 + 1/4 + . . . 1/n > limita
programul va afisa fiecare suma si in final numarul de termeni insumati*/
#include <stdio.h>
#define MAX_TERMENI 1000
void main()
{
long int n = 0;
long double suma = 0, limita;
printf("\nProgramul calculeaza suma unei serii pana la o limita,\n\tdar nu "
"mai mult de %d termeni.\nSeria este: 1 + 1/2 + 1/3 + 1/4 + . . . "
"1/n > limita\n", MAX_TERMENI);
printf ("Specificati limita: ");
scanf ("%Lf", &limita);
do
{
n ++;
if (n % 100 == 0)
printf ("Pasul=%li\tSuma=%Lf\n", n, suma);
suma += (long double) 1/n;
}
while (suma < limita && n < MAX_TERMENI);
printf("Suma finala este : %Lf\n", suma );
printf("Numarul de termeni insumati este: %li\n", n);
}
________________________________________________________________________
/* Programul citeste un caracter si in functie de acesta se termina sau se
executa ciclic; daca caracterul este 'd', 'D', 'n' sau'N' se executa
ciclic pana se introduce un caracter diferit de acestea;
le terminarea programului se emite un sunet
*/
#include <iostream.h>
void main(void)
{
int gata = 1;
char litera;
while (gata)
{
cout << endl;
cout << "Programul citeste caractere, cat timp acestea sunt: d, D, n sau N."
<< endl;
cout << "Pentru orice alt caracter tastat programul se termina si "
"afiseaza caracterul." << endl;
cout << "Tasteaza D(d) sau N(n) si apoi Enter pentru a continua: ";
cin >> litera;
if ((litera != 'D') && (litera != 'd') && (litera != 'N') && (litera != 'n'))
{
gata = 0;
cout << '\a'; //Sunet pentru altfel de caracter
}
}
cout << "Carcaterul tastat a fost " << litera << endl;
}
________________________________________________________________________
/* Tipareste un numar intreg (de maxim 9-10 cifre) in ordie inversa*/
#include<stdio.h>
void main()
{
long int numar, rest;
printf("\nProgramul afiseaza un numar intreg (maxim 9-10 cifre) in ordie "
"inversa.\n");
printf ("Introduceti un numar intreg:");
scanf ("%li",&numar);
printf ("Numarul scris in ordine inversa:");
do
{
rest=numar%10;
printf("%d", rest);
numar/=10;
}
while (numar);
printf ("\n");
}
________________________________________________________________________
/* Determinarea valorii unei functii, definite pe intervale intr-un punct
dat, x */
#include <stdio.h>
#include <math.h>
main()
{
float x, f;
printf ("\nSe calculeaza valoarea functiei f(x), definita astfel:\n");
printf ("
| x^2 - 2*x + 5 , pt. x<= 1\n");
printf ("f(x) = | x*sin(x) - 2 , pt. 1<x<=5\n");
printf ("
| ln(2*x^2 + 1) - 5
, pt. x>5\n");
printf ("Introduceti valoarea lui x:");
scanf ("%f", &x);
if ( x <= 1 )
f = pow(x,2) - 2*x +5;
else if ( x <= 5 )
f = x*sin(x) -2;
else
f = log(2*pow(x,2) + 1 ) - 5;
printf ("f(%.2f)=%.3f\n", x, f);
}
________________________________________________________________________
/* Media valorilor pozitive dintr-un sir de valori ce se termina cu 0 */
#include<stdio.h>
void main()
{
double val, suma = 0;
int nv =1, nvp = 0;
printf ("\nProgramul determina media numerelor pozitive\n");
printf ("Introduceti numere (0 = sfarsit)\nNumar (1)=");
scanf ("%lf", &val);
while (val != 0)
{
nv++;
if (val > 0)
{
nvp++;
suma += val;
}
printf ("Numar (%d)= ", nv);
scanf ("%lf", &val);
} /* while */
if(nvp>0)
printf ("Media valorilor pozitive este %5.2f\n", suma/nvp);
else
printf ("Nu s-au introdus valori pozitive\n");
}
________________________________________________________________________
/* Programul determina numarul de caractere citite de la tastatura */
#include <stdio.h>
main()
{
int nc=0;
printf("\nProgramul determina numarul de caractere dintr-un text.\n"
"Textul se va termina cu sfarsit de fisier: CTRL-Z, ENTER.\n"
"Introduceti textul:\n");
for ( ; getchar() != EOF ; ++nc );
printf("/n Numarul de caractere din textul introdus este : %d\n",nc);
}
do
{
numar_convertit[indice]=numar%baza;
numar/=baza;
indice++;
}
while(numar);
printf("Numarul convertit este: ");
for(indice--;indice>=0;indice--)
{
ind_cifre=numar_convertit[indice];
printf("%c",cifre_baza[ind_cifre]);
}
printf("\n");
}
________________________________________________________________________
/* programul afiseaza o valoare numerica, cuprinsa in intervalul 0..999,
in litere si cifre.
Programul se va executa ciclic pana se introduce valoarea -1. */
#include <stdio.h>
main()
{
int numar, sute, zeci, unitati;
printf("\nProgramul afiseaza o valoare numerica,"
" cuprinsa in intervalul 0..999,\nin litere si cifre.\n"
"Programul se va executa ciclic pana se introduce valoarea -1.\n");
do
{
printf("numar= ");
scanf("%d", &numar);
}
while ( numar < -1 || numar > 999 );
while ( numar >= 0 && numar <= 999 )
{
printf("%d=",numar);
unitati = numar % 10;
zeci = numar / 10 % 10;
sute = numar / 100;
switch ( sute )
{
case 0 : break;
case 1 : printf("o"); break;
case 2 : printf("doua"); break;
case 3 : printf("trei"); break;
case 4 : printf("patru"); break;
case 5 : printf("cinci"); break;
printf ("zeci");
if ( unitati != 0 )
printf ("si");
}
switch (unitati)
{
case 0: if ( numar == 0 )
printf ("zero");
break;
case 1: printf ("unu"); break;
case 2: printf ("doi"); break;
case 3: printf ("trei"); break;
case 4: printf ("patru"); break;
case 5: printf ("cinci"); break;
case 6: printf ("sase"); break;
case 7: printf ("sapte"); break;
case 8: printf ("opt"); break;
case 9: printf ("noua"); break;
}
/* switch */
}
/* else zeci */
printf ("=\n");
do
{
printf ("Introduceti numar (>0 si <999, sau -1 = stop):");
scanf ("%d", &numar);
}
while ( numar < -1 || numar > 999 );
}
/* while */
}
/* sfarsit main */
________________________________________________________________________
/* programul determina valoarea constantei PI, utilizand relatia:
PI = 4 ( 1 - 1/3 +1/5 -1/7 + 1/9 - 1/11 + . . . .
cu o anumita 'precizie'
*/
#include <stdio.h>
#define MAX_TERMENI 100000
void main()
{
double precizia,termen, pi=4;
long int iteratia=1,i=1,n=1;
printf("\nProgramul calculeaza constanta \"pi\" cu o anumita precizie, "
"utilizand seria:\n"
"PI = 4 ( 1 - 1/3 +1/5 -1/7 + 1/9 - 1/11 + . . . .\n"
"(se insumeaza cel mult %d termeni)\n", MAX_TERMENI);
printf("Introduceti precizia: ");
scanf("%lf",&precizia);
do
{
n += 2 ;iteratia++;
i=-i;
termen=((double)4*i)/n;
pi+=termen;
if ( iteratia % 5000 == 0 )
printf("Iteratia %li , PI = %lf\n", iteratia, pi);
}
while( termen*i > precizia && n < MAX_TERMENI);
printf ("Rezultatul este: %.15lg , dupa %li iteratii\n",pi, iteratia);
}
________________________________________________________________________
/* atoi : converteste un sir de caractere s la un intreg, versiunea 2 */
#include <stdio.h>
#include <ctype.h>
int atoi ( char s[ ] )
{
int i , n , semn ;
for ( i = 0 ; isspace ( s[ i ] ) ; i++ ); /* se ignora spatiile albe */
semn = ( s[ i ] == '-' ) ? -1 : 1;
if (s[ i ] == '+' || s[ i ] == '-' )
i++;
for ( n = 0 ; isdigit ( s[ i ] ) ; i++ )
n = 10 * n + ( s [ i ] - '0' );
return semn * n ;
}
void main()
{
char sir[20];
int valoare;
printf("\nSe converteste o valoare numerica, citita ca sir de caractere"
" la un numar\n");
printf("Introduceti valoarea: ");
scanf("%s", sir);
valoare = atoi ( sir);
printf("Valoarea numerica este: %i\n", valoare);
}
________________________________________________________________________
/* Converteste un numar intreg intr-o alta baza din domeniul {2,...,16} */
#include<stdio.h>
void main()
{
char cifre_baza[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int numar_convertit[32],baza,indice,ind_cifre;
long int numar;
break;
case '/':
case ':':
{
char car;
printf("\nProgramul inlocuieste caracterele dintr-o linie de text cu "
"caracterul alfabetic\nurmator, dar pastreaza spatiile. "
"Introduceti linia de text:\n");
while ((car = getchar())!='\n')
{
if (car == SPATIU)
putchar (car);
else
putchar (car+1);
}
printf("\n");
}
________________________________________________________________________
/* Programul determina cate numere sunt pozitive, negative sau egale cu 0 */
#include <stdio.h>
#include <conio.h>
void main(void)
{
int p=0,n=0,z=0,nr,max,i;
clrscr();
printf("Programul afiseaza cate numere sunt pozitive, negative si "
"cate sunt zero.\n");
printf("Introduceti numarul de elemente:");
scanf("%d",&max);
for(i=0;i<max;i++)
{
printf("Numarul(%d)= ",i+1);
scanf("%d",&nr);
if(nr<0)
n++;
else
if(nr==0)
z++;
else
p++;
}
printf("\nNumere egale cu zero: %d;\n",z);
printf("Numere
negative: %d;\n",n);
printf("Numere
pozitive: %d.\n",p);
}
________________________________________________________________________
/* Programul determina daca doua numere sunt prime intre
ele, determinand cel mai mare divizor comun; daca
acesta este 1 -> numerele sunt prime intre ele,
a=3;
else
a=a+2;
}
if((n%a)==0)
printf("Numarul %ld nu este prim.",n);
else
printf("Numarul %ld este prim.",n);
printf("\nApasa o tasta pentru a termina programul.\n");
getch();
}
________________________________________________________________________
/* Programul numara cifre, spatii albe si alte caractere */
#include <stdio.h>
void main ()
{
int car, i, nr_sp_alb, nr_alt_car, nr_cifre[ 10 ];
printf("\nProgramul numara cifre, spatii albe si alte caractere dintr-un\n"
"text introdus de la tastatura, ce se termina cu CTRL-Z,ENTER.\n");
nr_sp_alb = nr_alt_car = 0 ;
for ( i = 0 ; i < 10 ; i++ )
nr_cifre[ i ] = 0 ;
while ( ( car = getchar ( ) ) != EOF ) {
switch ( car ) {
case '0' : case '1': case '2' : case '3' : case '4' :
case '5' : case '6': case '7' : case '8' : case '9' :
nr_cifre [ car - '0' ]++ ;
break ;
case ' ' :
case '\n':
case '\t' :
nr_sp_alb ++ ;
break;
default :
nr_alt_car++ ;
break ;
}
}
printf ("Cifre = ") ;
for ( i = 0 ; i <10 ; i ++ )
if (nr_cifre[i])
printf ("%d-%d, ", i, nr_cifre [ i ]);
printf ("\nSpatii albe = %d ,\nAlte caractere = %d\n",
nr_sp_alb , nr_alt_car ) ;
return 0 ;
}
/*
f(x) = x^2 - 4x -5, care are solutiile x1=-1, x2=5 */
double f ( double x )
{
double valf;
valf = x*x -4*x -5;
return ( valf );
}
void main()
{
double a,b,mijloc,precizia,modul;
printf("\nProgramul localizeaza radacina unei functii, intr-un interval dat\n"
"prin metoda \"injumatatirii intervalului\".\n"
"functia este f(x) = x^2 - 4x -5, sol. x1=-1, x2=5\n");
printf("Introduceti intervalul a,b: ");
scanf("%lf",&a);
scanf("%lf",&b);
printf("introduceti precizia de localizare a radacinii:");
scanf("%lf",&precizia);
do
{
mijloc=(a+b)/2;
if(f(a)*f(mijloc)<0)
b=mijloc;
else if (f(mijloc)*f(b)<0)
a=mijloc;
else goto gata;
modul =a-b;
if ( modul < 0 )
modul = -modul;
}
while(modul>precizia);
gata : printf("Solutia : %lf \n",( a+ b)/2 );
}
________________________________________________________________________
/* Programul rezolva un sistem de doua ecuatii cu doua necunoscute:
a11*x + a12*y = c1
a21*x + a22*y = c2
*/
#include <stdio.h>
float a11,a12,c1,a21,a22,c2,det,detx,dety;
main()
{
printf("\nProgramul rezolva un sistem de doua ecuatii cu doua necunoscute:\n"
"
a11*x + a12*y = c1\n"
"
a21*x + a22*y = c2\n");
printf("Introduceti valorile coeficientilor (a11, a12, c1, a21, a22, c2):\n");
scanf("%f%f%f%f%f%f",&a11,&a12,&c1,&a21,&a22,&c2);
det = a11*a22 - a12*a21;
detx=c1*a22-c2*a12;
dety=c2*a11-c1*a21;
if (det!=0)
printf("x=%3.2f y=%3.2f\n",detx/det,dety/det);
else if ( detx == 0 )
printf("sistem compatibil nedeterminat\n");
else
printf("sistem incompatibil\n");
}
________________________________________________________________________
/* Programul calculeaza suma cifrelor unui numar intreg */
#include <stdio.h>
void main ( )
{
long int numar;
int suma, cifra;
printf("\nProgramul calculeaza suma cifrelor unui numar intreg.\n");
printf ("Introduceti un numar intreg:\n");
scanf ("%li", &numar);
suma=0;
do
{
cifra = numar % 10;
suma += cifra;
numar /= 10;
}
while (numar>0);
printf ("Suma cifrelor numarului introdus este:%i\n",suma);
}
________________________________________________________________________
/* Programul calculeza suma 1+1/a + 1/a^2 +1/a^3 + . . 1/a^n pentru a>1,
cu o precizie specificata; sa se afiseze si puterea lui a la care
s-a ajuns (n) */
#include <stdio.h>
#define MAX_TERM 1000
void main ( )
{
double precizie, a, suma, termen;
int n;
printf("\nProgramul calculeza suma 1+1/a + 1/a^2 +1/a^3 + . . 1/a^n\n"
"pentru a>1, cu o precizie specificata;\nafiseaza si puterea lui a"
"la care s-a ajuns (n), dar nu peste %\n", MAX_TERM);
printf ("Introduceti a (a>1):");
media += val;
}
no += printf("valoarea:");
nr_val += scanf("%lf",&val);
}
if ( n==0 )
no += printf("Sir vid de valori\n");
else
{
media /= n;
no += printf("Media valorilor pozitive este: %.2lf\n",media);
}
no += printf("Numarul total de valori citite este : %d\n",nr_val);
printf("Numar de caractere afisate:%d\n",no);
}
________________________________________________________________________
/* Program ce determina tipul caracterului tastat */
#include <stdio.h>
void main ( )
{
char c;
printf("\nProgram ce determina tipul caracterului tastat\n"
"\t(litera, cifra sau caracter special).\n");
printf ("Introduceti un singur caracter: ");
scanf ("%c", &c);
if ((c>='a' && c<='z') || (c>='A' && c<='Z'))
printf ("Este un caracter alfabetic \n");
else if (c>='0' && c<='9')
printf ("Este o cifra \n");
else
printf ("Este un caracter special \n");
}
________________________________________________________________________
/* Programul determina daca trei numere : a , b , c pot fi laturile unui
triunghi; si daca da, determina tipul triunghiului: echileteral,
isoscel, dreptunghic sau oarecare */
#include <stdio.h>
main()
{
int a,b,c;
printf("\nProgramul determina daca trei numere : a, b, c, pot fi laturile"
" unui triunghi;\nsi daca da, determina tipul triunghiului:\n"
"echileteral, isoscel, dreptunghic sau oarecare.\n");
printf("Introduceti valorile pt cele trei laturi\n");
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
printf("c="); scanf("%d",&c);
if(a < b + c && b< a + c && c < a + b)
{ /* este triunghi , si se determina tipul triunghiului */
printf("este triunghi");
if ( a==b && b==c ) /* triunghi echilateral */
printf(" echilateral\n");
else if ( a==b )
/* triunghi isoscel, si se determina baza */
printf(" isoscel, cu baza c\n");
else if ( a==c)
printf(" isoscel, cu baza b\n");
else if ( b==c)
printf(" isoscel, cu baza a\n");
else if ( a*a==b*b+c*c ) /*triunghi dreptunghic, si se afla ipotenuza*/
printf(" dreptunghic, cu ipotenuza a\n");
else if ( b*b==c*c+a*a )
printf(" dreptunghic, cu ipotenuza b\n");
else if ( c*c==a*a+b*b)
printf(" dreptunghic, cu ipotenuza c\n");
else
printf(" oarecare\n");
}
else
printf("nu este triunghi");
}
________________________________________________________________________
// Sa se calculeze valoarea polinomului pn(x) si a polinomului derivat
// pn'(x), in ipoteza ca termenii se dau
// in ordinea descrescatoare a puterilor lui x.
#include <stdio.h>
main()
{
int i,n;
float valp=0,valdp=0,x,c;
printf("\nProgramul calculeaza valoarea unui polinom p(x) si a polinomului"
" derivat p'(x)\nin punctul x; termenii se dau in ordinea"
" descrescatoare a puterilor lui x.\n");
printf("x=");
scanf("%f",&x);
printf("Grad polinom = ");
scanf("%d",&n);
i=n;
while(i>=0)
{
printf("Coeficient rang %d = ",i);
scanf("%f",&c);
valp=valp*x+c;
if ( i )
valdp = valdp * x + c*i;
i--;
}
printf("Valoarea polinomului = %f\n",valp);
printf("Valoarea derivatei = %f\n",valdp);
}
________________________________________________________________________
/* Programul calculeaza valorea unui polinom , intr-un punct x dat.
Ind.: se va utiliza pentru calculul valorii forma de inmultire prin
impachetare :
P(x) = {..{{{ a(n)*x + a(n-1) }*x + a(n-2) }*x + a(n-3)}*x +..a(1)}*x+a(0)
*/
#include <stdio.h>
#include <conio.h>
void main(void)
{
int grad, i, val, x;
int coef[10];
clrscr();
printf ("Programul calculeaza valoarea unui polinom de grad n "
"intr-un punct x dat\n\n");
printf ("Introduceti gradul polinomului:");
scanf ("%d", &grad);
for ( i = grad ; i >= 0 ; i--)
{
printf ("Introduceti coeficientul lui x la puterea %d:", i);
scanf ("%d", &coef[i]);
}
printf ("Introduceti x-ul in care se calculeaza valoarea polinomului:");
scanf ("%d", &x);
val = 0;
for ( i = grad ; i >= 0 ; i--)
val = val * x + coef[i];
printf ("Valoarea este: %d", val);
}
________________________________________________________________________
/* Conversia unui numar intreg intr-o baza oarecare - 2..36 */
#include <stdio.h>
#define LUNG_MAX 32
void main ()
{
char cifra[LUNG_MAX];
long int numar, baza, indice;
printf("\nConversia unui numar intreg intr-o baza oarecare (2..36)\n");
printf ("Numar de convertit: ");
void main()
{
double a[DIM][DIM], b[DIM][DIM], c[DIM][DIM];
double x;
int la, ca, lb, cb, i, j, k;
printf("\nSe calculeaza produsul a doua matrice, daca se pot inmulti.\n");
printf ("Dimensiunea matricei A (linii,coloane):");
scanf ("%d%d", &la, &ca);
printf ("Dimensiunea matricei B (linii,coloane):");
scanf ("%d%d", &lb, &cb);
if (ca != lb)
printf ("Nu se pot inmulti\n");
else
{
printf ("Matricea A:\n");
for ( i = 0 ; i < la ; i++)
for ( j = 0; j < ca ;j++)
{
printf ("A(%d,%d)=",i+1, j+1);
scanf ("%lf", &x);
a[i][j] = x;
}
printf("Matricea B:\n");
for ( i = 0 ; i < lb ; i++)
for ( j = 0 ; j < cb ; j++)
{
printf ("B(%d,%d)=", i+1, j+1);
scanf ("%lf", &x);
b[i][j] = x;
}
printf("Matricea rezultata dupa inmultire:\n");
for ( i = 0 ; i <la ; i++)
for ( j = 0 ; j < cb ; j++)
{
c[i][j] = 0;
for ( k = 0 ; k < ca ; k++)
c[i][j] += a[i][k] * b[k][j];
printf ("C(%d,%d)=%.2lf\n", i+1, j+1, c[i][j]);
}
}
}
________________________________________________________________________
/* Programul numara cate valori, dintr-un sir sunt egale cu o valoare data
*/
#include<stdio.h>
#define NMAX 100
void main()
{
double V[NMAX], valoare;
int n,i,contor=0;
printf("\nProgramul numara cate valori, dintr-un sir sunt egale"
"cu o valoare data.\n");
printf("Numarul de elemente din sir este:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("V(%d)=",i+1);
scanf("%lf",&V[i]);
}
printf("\n\tValoarea cautata este:");
scanf("%lf",&valoare);
for(i=0;i<=n;i++)
{
if(V[i]==valoare)
contor++;
}
if(contor==0)
printf("\nNu exista nici o valoare a sirului care sa fie egala"
" cu valoarea data\n\n");
else
printf("\nNumarul de valori ale sirului egale cu valoarea data"
" este:%d\n",contor);
}
________________________________________________________________________
/* Pentru n dat, sa se calculeze coeficientii c0,c1,...,cn, stiind ca:
c0
c1
cp
----- + --- +...+ --- = 1, pentru p=0,1,...,n.
p+1 p
1
*/
#include <stdio.h>
#define DIM 201
main()
{
int
n, p, k, nvl=0;
double c[DIM];
printf("Programul calculeaza coeficientii:\n");
printf(" c0
c1
cp
\n");
printf("----- + --- +...+ --- = 1, pentru p=0,1,...,n.\n");
printf(" p+1 p
1
\n");
printf("Specificati n (n<200) =");
scanf("%d", &n);
if (ni1%k==0)
{
x1++;
ni1=ni1/k;
}
} while (ni1%k==0);
div1[k]=x1;
do{
if(ni2%k==0)
{
x2++;
ni2=ni2/k;
}
} while (ni2%k==0);
div2[k]=x2;
}
}
}
int min(int a,int b)
{
if(a<b)
return a;
else
return b;
}
void afla_cmmdc()
{
int i,j;
for(i=1;i<10000;i++)
if((div1[i]!=0)&&(div2[i]!=0))
cmmdc[i]=min(div1[i],div2[i]);
}
void main()
{
for(i=0;i<1000;i++)
cmmdc[i]=0;
scanf("%d",&n1);
scanf("%d",&n2);
divizor();
afla_cmmdc();
for(i=1;i<1000;i++)
{
if (cmmdc[i]!=0)
printf("%d - %d.",i,cmmdc[i]);
}
}
________________________________________________________________________
/* Se calculeaza cel mai mare divizor comun a doua numere n , m utilizind
algoritmul :
- se construiesc doua tablouri cu factorii primi ai celor doua numere si
factorii de multiplicitate pentru fiecare factor prim;
- se vor selecta in c.m.m.d.c factorii primi comuni , cu factorul de
multiplicitate minim dintre cei doi.
*/
#include <iostream.h>
#include <math.h>
#define NMAX 100
void descompune(int *a,int *n,int nr)
{ int i=2,mult=0,n1=nr,num=0;
while(n1>1)
{ if(n1%i==0)
{ mult++;n1/=i;}
else
{
if(mult>0)
{
*(a+num*2)=i;
*(a+num*2+1)=mult;
num++;
}
if(i<nr)
{ i++;
mult=0;
}
}
}
*(a+num*2)=i;
*(a+num*2+1)=mult;
*n=num;
}
void main(void)
{
int a[NMAX][2],b[NMAX][2],c[NMAX][2],nr1,nr2,nd1,nd2,u=0,j=-1;
cout << "\nProgramul determina cmmdc pentru 2 numere." << endl;
cout <<"Nr1=";cin >> nr1;
cout <<"Nr2=";cin >> nr2;
descompune(&a[0][0],&nd1,nr1);
descompune(&b[0][0],&nd2,nr2);
for(int i=0;i<=nd2;i++)
{
j=-1;
for(int q=0;q<=nd1;q++)
if(b[q][0]==a[i][0]) j=q;
if(j!=-1)
{
c[u][0]=a[i][0];
c[u][1]=(b[j][1]>=a[i][1])?a[i][1]:b[j][1];
u++;
}
}
cout <<"Numitorul comun este:";
if(u>0)
{
for(i=0;i<u-1;i++)
cout <<c[i][0] <<"^" <<c[i][1] <<"*";
cout <<c[u-1][0] <<"^" <<c[u-1][1];
}
else
cout <<"1";
}
________________________________________________________________________
/* Programul afiseaza o valoare intreaga in toate bazele de la 2 la 16 */
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
int nr,i,j;
char numar[17];
clrscr();
printf("\nProgram care afiseaza o valuare intreaga in orice baza de la 2"
" la 16.\n");
printf("\nIntoduceti numarul:");
scanf("%d",&nr);
printf("\n\n");
for(i=16;i>1;i--)
{
itoa(nr,numar,i);
for(j=0;j<strlen(numar);j++)
numar[j]=toupper(numar[j]);
printf("%16s in baza %d\n",numar,i);}}
if((val<=sir[i])&&(m==0))
{
printf("%d ",val);
m=1;
}
printf("%d ",sir[i]);
}
if(m==0)
printf("%d\n",val);
}
________________________________________________________________________
/* Se considera urmatorul joc : N copii , identificati prin numerele :
1,2,3,...,N se aseaza in cerc si incepind de la copilul K se numara de
la 1 pina la M , eliminindu-l din joc pe ultimul ; se reia numaratoarea
cu urmatorul si se elimina al 2-lea copil din joc , s.a.m.d.,
pana ramane unul singur (castigatorul)
Sa se stabileasca ordinea de iesire din joc.
*/
#include <stdio.h>
#define MAX_COPII 100
void main(void)
{
int copil[MAX_COPII], out[MAX_COPII];
// primul tablou va contine 1 pentru copii ce sunt in joc, 0 pt. eliminati
// cel de-al doilea va contine copii in ordinea eliminarii lor
int n,k,e; // nr. copii, k-pozitia de unde incepe eliminarea, e- pasul
int j, o, i, contor;
printf("\nSe considera urmatorul joc : N copii, identificati prin numerele:"
"1,2,3,...,N\nse aseaza in cerc si incepind de la copilul K se"
"numara de la 1 pina la M,\neliminindu-l din joc pe ultimul;"
"se reia numaratoarea cu urmatorul si se elimina\nal 2-lea copil "
"din joc , s.a.m.d., pana ramane unul singur (castigatorul)\n"
"Sa se stabileasca ordinea de iesire din joc.\n");
do
{
printf("Nr. de copii care intra in joc(max.%d): ",MAX_COPII);
scanf("%d",&n);
} while ( n < 1 || n > MAX_COPII );
do
{
printf("De la ce copil se incepe numaratoarea (1-%d): ",n);
scanf("%d",&k);
} while ( k < 1 || k > n );
do
{
printf("Pasul de numarare (al catalea copil se elimina) (1-%d): ",n);
scanf("%d",&e);
} while ( e < 1 || e > n );
if(maxim<vector[i])
{
maxim=vector[i];
pozitie=i;
}
printf("Valoarea maxima este: v(%d)=%g.\n",pozitie+1,maxim);
}
________________________________________________________________________
/* Programul determina maximul dintr-un vector cu n componente
si pozitia acestuia
*/
#include<stdio.h>
#define DIM 100
main()
{
double vector[DIM], maxim, v;
int n,i,pozitie;
printf("\nProgramul determina maximul dintr-un vector cu n elemente "
"si pozitia acestuia.\n");
printf("Introduceti numarul de elemente din sir: ");
scanf("%d",&n);
printf("Introduceti valori:\n");
for(i=0;i<n;i++)
{
printf("v(%d)=",i+1);
scanf("%lf",&v);
vector[i] = v;
}
maxim=vector[1];
pozitie=0;
for(i=0;i<n;i++)
if(maxim<vector[i])
{
maxim=vector[i];
pozitie=i;
}
printf("Valoarea maxima este v(%d)=%lg\n",pozitie+1,maxim);
}
________________________________________________________________________
/* Programul determina subsirul e monotonie maxima dintr-un sir dat */
#include <stdio.h>
#include <conio.h>
void main(void)
{
int lc,ld,n,i,j;
int s[100],sc[100],sd[100];
clrscr();
printf("Programul determina subsirul e monotonie maxima dintr-un sir dat\n\n");
j=2;
lc=0;
ld=0;
printf("Numar componente:");
scanf("%d",&n);
clrscr();
s[0]=0;
for(i=1;i<=n;i++)
{
gotoxy(1,24);
clreol();
printf("Sir[%2d]=",i);
scanf("%d",&s[i]);
if(s[i]>s[i-1])
{
j++;
sc[lc]=s[i];
lc++;
gotoxy(1,2);printf("Subsir cresc:");
gotoxy(1,j);printf("%d",s[i]);
}
else
{
j++;
sd[ld]=s[i];
ld++;
gotoxy(35,2);printf("Subsir descresc:");
gotoxy(35,j);printf("%d",s[i]);
}
}
}
________________________________________________________________________
/* Programul determina maximul de pe fiecare linie a unei matrici */
#include<stdio.h>
#include<conio.h>
void main()
{
int a[10][10],M[10];
int n,i,j,*matrice;
clrscr();
printf("\nProgramul determina maximul de pe fiecare linie a unei matrici.\n");
printf("Introduceti dimensiunea matricei :");
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf("a(%d,%d)=",i+1,j+1);
scanf("%d",&a[i][j]);
}
matrice=&a[0][0];
for(i=0;i<n;i++)
{
M[i]=*(matrice+i*10 + i);
for(j=0;j<n;j++)
{
if (*(matrice+i*10+j)>M[i])
M[i]=*(matrice+i*10+j);
}
}
printf("\n Elementele maxime sunt :\n");
for (i=0;i<n;i++)
printf("linia %i = %d\n",i+1,M[i]);
}
________________________________________________________________________
/* Programul numara cifrele (de cate ori apare fiecare cifra),
spatiile albe si celelalte caractere */
#include <stdio.h>
main ( )
{
int car, i, spatiu_alb, alte_car;
int nr_cifre [ 10 ], suma_nr_cif = 0;
spatiu_alb = alte_car = 0 ;
printf("\nProgramul numara cifrele (de cate ori apare fiecare cifra),\n"
"spatiile albe si celelalte caractere, dintr-un text.\n"
"Textul se termina cu CTRL-Z, ENTER.\nIntroduceti textul:\n");
for ( i = 0 ; i < 10 ; ++i )
nr_cifre [ i ] = 0 ;
while ( ( car = getchar ( ) ) != EOF )
if ( car>= '0' && car <= '9' )
++ nr_cifre [car- '0' ] ;
else if ( car == ' ' || car == '\n' || car == '\t' )
++ spatiu_alb ;
else
++ alte_car ;
for ( i = 0 ; i < 10 ; ++i )
suma_nr_cif += nr_cifre[i];
if (suma_nr_cif)
printf ( "cifre = " ) ;
for ( i = 0 ; i < 10 ; ++i )
if ( nr_cifre [i] != 0 )
printf ( " cifra %d, de %d ori\n", i, nr_cifre [ i ] ) ;
printf ( "spatii albe = %d , alte caractere = %d\n" ,
spatiu_alb, alte_car ) ;
}
________________________________________________________________________
/* Un numar perfect este un numar egal cu suma divizorilor sai,
printre care se considera si divizorul 1. Sa se determine toate
numerele perfecte mai mici sau egale cu un numar dat n.
De exemplu 28 este un numar perfect deoarece 28=1+2+4+7+14
(1,2,4,7 si 14 fiind divizorii lui 28).
*/
#include <stdio.h>
#include <conio.h>
#define DIM 10000
main()
{
int i, a, b, k, j, index=0;
int num_perfect[DIM];
clrscr();
printf("Un numar perfect este un numar egal cu suma divizorilor sai,\n"
"printre care se considera si divizorul 1. Programul afla toate\n"
"numerele perfecte dintr-un interval dat.\n"
"De exemplu 28 este un numar perfect deoarece 28=1+2+4+7+14,\n"
"(1,2,4,7 si 14 fiind divizorii lui 28).\n");
printf("Specificati intervalul [a,b], in care se cauta numere "
"perfecte:");
scanf("%d%d", &a, &b);
for (j = a ; j <= b ; j++)
{
k=0;
for (i = 1 ; i <= j/2 && k<= j ; i++)
if (j%i == 0)
k=k+i;
if (k==j)
num_perfect[index++]=k;
}
if (--index >= 0)
for (i = 0 ; i <= index ; i++)
printf("perfect[%d]=%d\n", i+1, num_perfect[i]);
else
printf("In intervalul dat nu este nici un numar perfect\n");
}
aux = vector[1];
for ( p=2 ; p <= i ; p++ )
vector[p-1] = vector[p];
vector[i]= aux;
perm[i] = ( perm[i] + 1 ) % nr_perm[i];
} while ( perm [i] == 0 && i < n );
} while (npt != np );
}
void afisare_vector ( int vect[], int ne )
{
int i;
for ( i=1 ; i <= ne ; i++ )
printf(" %d ", vect[i]);
printf("\n");
}
________________________________________________________________________
/*
Programul determina numerele prime n intervalul [2,n]
si le depune intr-un tablou , daca nu se determina nici un
divizor in intervalul [ 2 , sqrt(n)]
*/
#include<stdio.h>
#define N_MAX 100
void main()
{
int n,p,i,este_prim,prim[N_MAX],index;
do
{
printf("\n\nSe determina numerele prime\
in intervalul 2, n <= 500\nn=");
scanf("%d",&n);
}
while(n>530);
prim[0]=2;
prim[1]=3;
index=2;
for(p=5;p<=n;p+=2)
{
este_prim=1;
for(i = 3;este_prim && i*i <= p;i += 2)
este_prim =!(p%i==0);
if(este_prim)
prim[index++]=p;
}
for(i=0;i<index;i++)
printf("%4d/",prim[i]);
printf("\nIn total %d numere prime\n\n",index);
}
________________________________________________________________________
/*
Determina numere prime utilizand sita lui Eratostene:
se "elimina" multiplii numerelor prime dintr-un vector boolean
care este initializat cu 'adevarat' pentru toate numerele
*/
#include<stdio.h>
#include <conio.h>
#define MAX 5000
void main()
{
int n,index,multiplu,contor,prim[MAX], nr_val_ecran = 0;
printf("\nDetermina numere prime utilizand sita lui Eratostene:\n"
"se \"elimina\" multiplii numerelor prime dintr-un vector boolean\n"
"care este initializat cu 'adevarat' pentru toate numerele.\n");
printf("Intervalul in care se determina numerele prime [2,n]; n= ");
scanf("%d",&n);
for(index=1;index<=n;index++)
prim[index]=1;
contor=1;
index=1;
do
{
index++;
if(prim[index])
{
printf("%4d/ ",index);
nr_val_ecran++;
if ( nr_val_ecran % 50 == 0 ) /* se afiseaza serii de cate 50 nr. */
{
printf("\n");
getch();
}
contor++;
for(multiplu=2;multiplu*index<n;multiplu++)
if(prim[multiplu*index])
{
prim[multiplu*index]=0;
contor++;
}
}
}
while(contor<n-1);
printf("\n");
}
________________________________________________________________________
/* produsul scalar a doi vectori tridimensionali */
# include <stdio.h>
# include <conio.h>
void main(void)
{
float x, u[3], v[3], ps=0;
int s;
clrscr();
printf("Program pentru determinarea produsului scalar a doi vectori "
"tridimensinali\n");
printf("Vectorul U:\n");
for(s=0;s<3;s++)
{
printf("u[%d]=",s);
scanf("%f",&x);
u[s] = x;
}
printf("\nVectorul V:\n");
for(s=0;s<3;s++)
{
printf("v[%d]=",s);
scanf("%f",&x);
v[s] = x;
}
for(s=0;s<3;s++)
ps=ps+u[s]*v[s];
printf("\nProdusul scalar=%10.2f\n",ps);
}
________________________________________________________________________
/* Program: Separa un sir in doua subsiruri, dupa cum valorile din
sirul sursa sunt mai mici sau mai mari decat o valoare data
*/
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
main()
{
int
k, i, j, j1, j2, n, val;
int
sir[100], subsir1[100], subsir2[100];
clrscr();
printf("Problema : Se da o valoare y si un sir x cu n componente.\n"
"Sa se separe sirul x in doua subsiruri astfel incat:\n"
"
- elementele din primul sa fie mai mici decat y,\n"
"
- iar din al doilea mai mari sau egale decat y.\n");
printf("Valoarea numarului y= "); scanf("%d",&val);
printf("Numarul de componente n= "); scanf("%d",&n);
clrscr();
for (k = 0; k < n; k += 2)
{
if ( ((k+1)/2) % 24 == 0 )
clrscr();
gotoxy(5, ((k+1)/2) % 24 + 1); delline();
printf("Sir[%d]= ",k+1); scanf("%d",&sir[k]);
if ( k + 1 < n )
{
gotoxy(35, ((k+1)/2) % 24 +1);
printf("Sir[%d]= ",k+2); scanf("%d",&sir[k+1]);
}
}
printf("\n\nApasa o tasta si se vor construi cele doua siruri");
getch();
j1 = 0; j2 = 0;
for (i = 0; i < n; i++)
if (sir[i] < val)
{
subsir1[j1] = sir[i];
j1 = j1 + 1;
}
else
{
subsir2[j2] = sir[i];
j2 = j2 + 1;
}
clrscr();
j = j1 > j2 ? j1 : j2;
gotoxy(5,1); printf("Subsir de val < %d.",val);
gotoxy(35,1); printf("Subsir de val >= %d.",val);
for ( i = 0 , k = 2 ; i < j ; i++ , k ++ )
{
if ( k % 24 == 0 )
{
printf("\nApasa o tasta si se continua afisarea");
getch();
clrscr();
}
if ( i < j1 )
{
gotoxy(5, k % 24 + 1);delline();
printf("subsir1(%d)=%d",i+1,subsir1[i]);
}
if ( i < j2 )
{
gotoxy(35, k % 24 + 1);
printf("subsir2(%d)=%d",i+1,subsir2[i]);
}
}
printf("\n\nApasa o tasta si se termina executia programului");
getch();
}
________________________________________________________________________
/* Programul rezolva un sistem triunghiular inferior, de forma:
a(1,1)*x(1)
=b(1)
a(2,1)*x(1)+a(2,2)*x(2)
=b(2)
a(3,1)*x(1)+a(3,2)*x(2)+a(3,3)*x(3)
=b(3)
...................................................................
a(n,1)*x(1)+a(n,2)*x(2)+a(n,3)*x(3)+.............+a(n,n)*x(n) =b(n) */
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j,n;
double x,c[50],a[50][50],b[50],s;
clrscr();
printf("Programul rezolva un sistem triunghiular inferior \n");
printf("Exemplu: un sistem de 3 ecuatii : \n");
printf("a[1][1]*x1
=b[1] \n");
printf("a[2][1]*x1+a[2][2]*x2
=b[2] \n");
printf("a[3][1]*x1+a[3][2]*x2+a[3][3]*x3=b[3] \n");
printf("a[n][1]*x1+a[n][2]*x2+ . . +a[n][n]*xn=b[n] \n");
printf("Introduceti numarul de ecuatii:");scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i<j)
a[i][j]=0;
else {
printf("a[%d][%d]=",i+1,j+1);scanf("%lf",&x);
a[i][j] = x;
}
for (i=0;i<n;i++)
{
printf("b[%d]=",i+1);scanf("%lf",&x);
b[i] = x;
}
c[0]=b[0]/a[0][0];
for (i=1;i<n;i++)
{
s=0;
for (j=0;j<i;j++)
s=s+a[i][j]*c[j];
c[i]=(b[i]-s)/a[i][j];
}
printf("Solutiile sistemului sint : \n");
for (j=0;j<n;j++)
printf("x%d=%lf \n",j+1,c[j]);
}
________________________________________________________________________
/*
programul ordoneaza un sir de valori, utilizand metoda inversiunilor
*/
#include<stdio.h>
#define MAX 100
void main()
{
int n,i,test,contor=0;
float sir[MAX],a;
do
{
printf("\nOrdonare sir prin metoda inversiunilor.\n");
printf("Introduceti numarul de termeni ai sirului(<100), n= ");
scanf("%d",&n);
}
while(n>99);
for(i=0;i<n;i++)
{
printf(" sir(%d)=",i+1);
scanf("%f",&a);
sir[i] = a;
}
do
{
test=0;
for(i=0;i<n-1;i++)
if(sir[i]>sir[i+1])
{
a=sir[i];
sir[i]=sir[i+1];
sir[i+1]=a;
contor++;
test=1;
}
}
while(test);
printf("\nSirul sortat este:\n");
for(i=0;i<n;i++)
printf(" sir(%d)=%G\n",i+1,sir[i]);
printf("\nPentru sortare s-au facut %d inversiuni.\n",contor);
}
________________________________________________________________________
/* Programul calculeaza subsirul crescator maxim dintr-un sir dat */
#include <iostream.h>
#define n 100
void main(void)
{
int st[n],sol[n],vect[n],max=-1,k=1,as,ev,mar;
cout << "\nProgramul calculeaza subsirul crescator maxim dintr-un sir dat\n";
cout <<"Dimensiune sir, n=";cin >>mar;
for(int i=0;i<mar;i++)
{
cout <<"v[" <<i+1 <<"]=";
cin >>vect[i];
}
st[0]=0;st[k]=0;
while(k>-1)
{
do{
as=1;
if(st[k]<mar-1)
{st[k]++;}
else
as=0;
ev=0;
if((as==1)&&(k>0))
{if(vect[st[k-1]]<vect[st[k]]) ev=1;}
if((as==1)&&(k==0)) ev=1;
}while((as==1)&&(ev==0));
if(as==0)
{
k--;
if(max<k)
{ for(i=0;i<=k;i++) sol[i]=st[i];
max=k;
}
}
if(ev==1)
{
if(k<mar-1)
{
k++;
st[k]=st[k-1];
}
}
}
cout << max+1 <<"\n";
for(i=0;i<=max;i++)
cout <<vect[sol[i]] <<" ";
cout <<"\n\n";
}
________________________________________________________________________
/* Programul calculeaza valoarea polinomului pn(x) si a polinomului derivat
pn'(x), in ipoteza ca termenii se dau in ordinea descrescatoare
a puterilor lui x. */
#include <stdio.h>
main()
{
int i,n;
float valp=0,valdp=0,x,c;
printf("\nProgramul calculeaza valoarea polinomului pn(x) si a polinomului\n"
"derivat pn'(x), in ipoteza ca termenii se dau in ordinea\n"
"descrescatoare a puterilor lui x.\n");
printf("Punctul in care se calculeaza valoarea polinomului, x=");
scanf("%f",&x);
printf("Grad polinom = ");
scanf("%d",&n);
i=n;
while(i>=0)
{
printf("Coeficient rang %d = ",i);
scanf("%f",&c);
valp=valp*x+c;
if ( i )
valdp = valdp * x + c*i;
i--;
}
printf("Valoarea polinomului = %f\n",valp);
printf("Valoarea derivatei partiale = %f\n",valdp);
}
________________________________________________________________________
/*Programul afiseaza un tablou de caractere*/
#include <stdio.h>
void main(void) {
char salut [] = {'S', 'a', 'l', 'u', 't', '!'};
int i;
numar /= baza;
} while ( numar > 0 );
for ( ind2 = 0 ; ind2 <= ind1/2 ; ind2 ++ )
{
aux = cifra[ind2];
cifra[ind2] = cifra[ind1-ind2];
cifra[ind1-ind2] = aux;
}
cifra[ind1] = '\0';
printf ("%s", cifra);
printf("\n");
}
________________________________________________________________________
/* Programul concateaza doua siruri de caractere, utilizand o functie,
si determina lungimea sirului obtinut */
#include <stdio.h>
void main()
{
void concat ( char rezultat[], char sir1[], char sir2[]);
int lungime ( char sir[]);
char s1[]={"Test pentru"};
char s2[]={" concatenare siruri de caractere"};
char s[60];
printf("\n\nProgram pentru concatenarea a doua siruri.\n");
printf("Sirurile initiale sunt: s1=\"%s\",\n\t\t\ts2=\"%s\"\n", s1, s2);
concat (s, s1, s2);
printf ("Sirul rezultat este:\n\t\t\"%s\"\n", s);
printf ("Lungimea sirului este final (concatenat): %d\n", lungime(s));
}
void concat (char rezultat[], char s1[], char s2[])
{
int i, j;
for ( i = 0 ; s1[i] != '\0' ; i++)
rezultat[i] = s1[i];
for ( j = 0 ; s2[j] != '\0' ; j++)
rezultat[i+j] = s2[j];
rezultat[i+j] = '\0';
}
int lungime (char sir[])
{
int contor=0;
for ( contor++ ; sir[contor] != '\0' ; contor++);
return (contor-1);
}
________________________________________________________________________
/* Programul elimina spatiile (blancurile) dintr-un sir de caractere */
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main(void)
{
int i, j;
char sir[100], sir1[100];
clrscr();
printf ("Porgramul elimina spatiile dintr-o linie de text.\n");
printf ("Introduceti linia (sirul de caractere):\n");
gets (sir1);
j = 0; /* contorul de caractere pentru sirul nou, fara spatii */
for( i = 0 ; i <= (strlen(sir1)) ; i++)
{
if (sir1[i] != ' ')
{
sir[j] = sir1[i];
j++;
}
}
sir[j] = '\0';
printf("Sirul fara spatii:\n\"%s\"\n",sir);
}
________________________________________________________________________
/* Programul inverseaza tipul de caractere dintr-un text:
de la litera mare la litera mica si invers */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LIMITA 30
#define DIMENS 81
main()
{
void transforma ( char linie[] );
char text [LIMITA] [DIMENS];
int nr_linie =0 , i;
printf("\nProgramul inverseaza tipul de litere dintr-un text.\n");
printf ("Introduceti cel mult %d linii pentru transformare.\n", LIMITA);
printf ("Introducerea se termina cu ENTER, pe o linie noua.\n");
while ( nr_linie < LIMITA && gets(text[nr_linie]) != NULL &&
strcmp ( text[nr_linie], "") !=0 )
nr_linie ++;
for ( i = 0 ; i < nr_linie ; i++)
{
transforma ( text[i] );
puts ( text[i] );
}
}
void transforma ( char *ptr_car )
{
while ( *ptr_car != '\0' )
{
if ( isupper ( *ptr_car ) )
*ptr_car = tolower ( *ptr_car );
else if ( islower ( *ptr_car ) )
*ptr_car = toupper ( *ptr_car );
ptr_car++;
}
}
________________________________________________________________________
/* Programul numara cuvintele dintr-un text, citit de la consola;
textul se termina cu caracterul '#', la inceputul unei linii noi */
#include <stdio.h>
#define MAX_LINIE 80
int litera (char c)
{
if(( c>= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ))
return (1); /* daca este o litera */
else
return (0); /* daca nu este o litera */
}
int numara_cuvinte ( char linie[] )
{
int contor_cuv = 0, cuvant = 1, i = 0; /* cuvant=1, s-a terminat un cuvant */
while ( linie[i] != '\0' )
{
if( litera ( linie[i] ) )
{
if (cuvant)
{
contor_cuv ++;
cuvant = 0; /* a inceput un nou cuvant */
}
}
else
cuvant = 1;
i++;
}
return ( contor_cuv );
}
void citeste_linie ( char l_text[] )
{
int i = 0;
char c;
do
/*
sau in loc de do{ . . .}
{
/*
while (( l_text[i++] = getchar()) != '\n');
c = getchar();
/*
l_text [i-1] = '\0';
if (c != '\n' && i < MAX_LINIE)
{
l_text[i] = c;
i++;
}
} while (c != '\n');
l_text[i] = '\0'; /* pune marcajulul de sfarsit de sir de caractere */
}
*/
*/
*/
void main()
{
int sf_text = 0, total_cuv = 0;
char text[MAX_LINIE + 1];
printf("\nProgramul numara cuvintele dintr-un text, citit de la consola.\n");
printf ("Introduceti un text terminat prin '#' la inceputul unei linii.\n");
while ( !sf_text )
{
citeste_linie ( text );
if ( text[0] == '#' )
sf_text = 1;
else
total_cuv += numara_cuvinte (text);
}
printf ("\nNumarul total de cuvinte este %d\n", total_cuv);
}
________________________________________________________________________
/* Programul citeste si tipareste numele utilizatorului */
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define INTREB "Cum te cheama ? "
#define SALUT "Salut ! "
void main ( )
{
char nume [50] ;
printf("\nProgramul citeste si tipareste numele utilizatorului.\n");
printf (INTREB);
scanf ("%s", nume);
printf (SALUT" %s ", nume);
printf ("\nNumele tau are %d litere, dar s-au rezervat %d locatii "
j=1;
for(i=1;i<(x+1);i++)
{
k=i/5;
if((k*5)==i)
{
sir1[j]=' ';
j++;
}
sir1[j]=sir[i];
j++;
}
printf("\nSirul nou:\n%s\n",sir1);
}
________________________________________________________________________
/* Programul citeste un set de linii de text si afiseaza linia cea mai
lunga */
#include <stdio.h>
#include <conio.h>
#define MAXLINIE 1000
/* dimensiunea maxima a liniei */
int getline ( char linie [ ] , int maxlinie );
void copy ( char catre [ ] , char de_la [ ] );
main ( )
{
int lung ;
/* lungimea curenta a liniei */
int max ;
/* lungimea maxima determinata */
char linie [ MAXLINIE ];
/* linia curenta */
char cea_mai_lunga [ MAXLINIE ];
/* linia cea mai lunga, salvata */
clrscr();
printf("\nProgramul citeste un set de linii de text si afiseaza linia "
"cea mai lunga.\nTextul se va termina cu CTRL-Z, ENTER."
" Introduceti liniile de text:\n");
max = 0;
while ( ( lung = getline ( linie , MAXLINIE ) ) > 0 )
if ( lung > max ) {
max = lung ;
copy ( cea_mai_lunga , linie ) ;
}
if ( max > 0 )
/* aceasta a fost cea mai lunga linie */
printf ("%s", cea_mai_lunga );
return 0 ;
}
/* getline : citeste o linie in s, si returneaza lungimea */
int getline ( char s[ ] , int lim )
{
int c, i;
for ( i = 0 ; (i< lim - 1) && (c = getchar ()) != EOF && c!='\n'; ++i )
s[ i ] = c ;
if ( c == '\n' ) {
s[ i ] = c;
++i ;
}
s[ i ] = '\0' ;
return i ;
}
/* copy: copiaza ` de_la ` ` catre ` ; presupune ca este suficient de mare */
void copy ( char catre[ ] , char de_la [ ] )
{
int i ;
i=0;
while ( ( catre [ i ] = de_la [ i ] ) != '\0')
++ i ;
}
________________________________________________________________________
/* Programul numara caractere, cuvinte, linii */
# include <stdio.h>
# define STOP '#'
# define DA 1
# define NU 0
void main ( )
{
char c;
/* contine caracter */
long nr_car=0L;
/* numara caracterele */
int nr_linii=1;
/* numara liniile */
int nr_cuv=0;
/* numara cuvintele */
int cuvant=NU;
/* ==DA, daca c este un cuvant */
printf("\nProgramul numara caractere, cuvinte, linii dintr-un text, "
"ce se termina cu \"#\".\nIntroduceti textul:\n");
while ((c=getchar( ))!=STOP)
{
nr_car++;
/*numara caracterul */
if (c=='\n')
nr_linii++;
/* numara liniile */
if (c!=' ' && c!='\n' && c!='+' && cuvant==NU)
{
cuvant=DA;
/*incepe un nou cuvant */
nr_cuv++;
/* numara cuvintele */
}
if ((c==' ' || c=='\n' || c== '+') && cuvant==DA)
cuvant=NU;
/* sfarsitul cuvantului */
}
printf ("%ld caractere / %d cuvinte / %d linii \n", nr_car, nr_cuv, nr_linii);
}
________________________________________________________________________
/* Programul numara liniile, cuvintele si caracterele introduse */
#include <stdio.h>
#define IN 1
/* este un caracter din interiorul unui cuvant*/
#define OUT 0 /* este in afara unui unui cuvant */
void main ( )
{
int car, nr_linii, nr_cuvinte, nr_car, stare;
stare = OUT;
nr_linii = nr_cuvinte = nr_car = 0;
printf("\nProgramul numara liniile, cuvintele si caracterele dintr-un text,\n"
"ce se termina cu CTRL-Z, ENTER.\nIntroduceti textul:\n");
while ( ( car = getchar ( ) ) != EOF )
{
++ nr_car;
if ( car == '\n' )
++nr_linii ;
if(car==' '||car=='\n'||car=='\t'||car==','||car=='.'||car==';')
stare = OUT ;
else if ( stare == OUT ) {
stare = IN ;
++ nr_cuvinte;
}
}
printf ("\nNumar de linii/ cuvinte/ caractere: %d, %d, %d.\n",
nr_linii , nr_cuvinte, nr_car);
}
________________________________________________________________________
/* Programul realizeaza inventarul cartilor dintr-o biblioteca
*/
#include <stdio.h>
#include <string.h>
#include <conio.h>
/* Numarul maxim de caractere pentru : titluri, autori,
si numarul maxim de carti
*/
#define MAXTIT 150
#define MAXAUT 50
#define MAXCARTI 100
/* STOP = sirul vid de caractere, care va termina introducerea datelor
*/
#define STOP ""
struct s_carte
{
char titlu [ MAXTIT ];
char autor [ MAXAUT ];
double
pret;
};
void main()
{
struct s_carte carte [ MAXCARTI ]; /* tablou cu structura de carte */
int
index , contor = 0;
double val;
clrscr();
printf("\nProgramul realizeaza inventarul cartilor dintr-o biblioteca.\n");
printf ("Introduceti titlurile cartilor.\n");
printf ("Pentru oprire se va tasta RETURN, la inceputul unei linii.\n");
printf ("\nTitlu carte:");
while ( contor < MAXCARTI && strcmp ( gets ( carte [contor].titlu ),
STOP ) != 0 )
{
printf ("Nume autor:");
gets (carte[contor].autor);
printf ("Pretul cartii:");
scanf ("%lf", &val);
while ( getchar() != '\n'); /* sterge linia curenta */
carte[contor++].pret = val;
if ( contor < MAXCARTI )
printf ("\nTitlu carte:");
}
printf ("\nInventarul cartilor introduse :\n");
for ( index = 0 ; index < contor ; index++ )
printf ("\"%s\" de %s : $ %.2lf\n", carte[index].titlu,
carte[index].autor, carte[index].pret );
}
________________________________________________________________________
/* Programul listeaza studentii, dintr-o grupa, in ordinea descrescatoare
a mediilor; se citesc, pentru fiecare student: numele, notele si
se calculeaza media.
Se citesc datele respective pentru studentii dintr-un an.
Pentru listare nu se sorteaza vectorul studentilor dupa medii, ci se
parcurge vectorul studenti, se determina studentul ce are cea mai mare
medie si nu a fost inca listat; pentru fiecare student listat se
actualizeaza campul "afisat"; aceste campuri au fost initializate la
introducerea datelor, pentru fiecare student. Ciclul de listare va lua
sfarsit dupa ce s-au listat toti studentii din grupa respectiva. */
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MAXGR 5
#define MAXSTUD 25
#define MAXNOTE 12
#define MAXNUME 15
struct s_student
{
char nume [MAXNUME];
char prenume [MAXNUME];
int nota [MAXNOTE];
double media;
int afisat;
/* acest camp precizeaza daca studentul respectiv a fost listat */
};
struct s_grupa
{
char numeg [MAXNUME];
int nr_stud;
struct s_student stud [MAXSTUD];
};
struct s_an
{
char numean [MAXNUME];
int nr_grupe;
int nr_note;
struct s_grupa grupa [MAXGR];
};
void main()
{
struct s_an an;
int ig, is, im, imax, contor;
double medie, medmax;
char numegr [MAXNUME];
clrscr();
printf("\nProgramul listeaza clasamentul studentilor, dintr-o grupa,\n"
"specificata de utilizator.\nSe citesc, pentru fiecare grupa si "
"student:\n\t\tnumele, prenumele, notele si se calculeaza media.\n"
"Se citesc datele respective pentru toti studentii dintr-un an.\n");
printf ("Nume an:");
gets (an.numean);
printf("Numarul de note(materii):");
scanf("%d", &an.nr_note);
while ( getchar() !='\n'); /* sterge restul liniei */
printf ("Numar grupe:");
scanf ("%d", &an.nr_grupe); /* numarul de grupe din an */
while ( getchar() != '\n');
for ( ig = 0 ; ig < an.nr_grupe ; ig++)
{
printf ("\nNume grupa:"); /* numele grupei */
gets ( an.grupa[ig].numeg );
printf("\nEVENT
COUNTRY
SCORE");
printf("\n------------------------------------------------");
for(i=0;i<n;i++)
{ for(j=0;j<=sport;j++)
if(!(strcmp(ev[j],count[i].event)))break;
if(j==(sport+1))ev[++sport]=count[i].event;
}
for(i=0;i<=sport;i++)
{
k=-1;
for(j=0;j<n;j++)
if(!(strcmp(count[j].event,ev[i]))){ tab[++k][0]=j;
tab[k][1]=count[j].score;
}
for(m=0;m<=k;m++)
for(t=0;t<k;t++)
if(tab[t][1]<tab[t+1][1]){ var=tab[t][1];
tab[t][1]=tab[t+1][1];
tab[t+1][1]=var;
var=tab[t][0];
tab[t][0]=tab[t+1][0];
tab[t+1][0]=var;
}
for(m=0;m<=k;m++)
printf("\n%s
%s
%d",count[tab[m][0]].event,count[tab[m]
[0]].country,count[tab[m][0]].score);
printf("\n------------------------------------------------");
}
getch();
}
________________________________________________________________________
#include <stdio.h>
#include <dos.h>
main()
{ void getdate ( struct date *dateblk);
void gettime ( struct time *timep);
struct date
{
int da_year;
char da_day;
char da_mon;
};
struct time
{
unsigned char ti_min;
unsigned char ti_hour;
unsigned char ti_hund;
unsigned char ti_sec;
};
struct date today;
struct time now;
printf("\nProgramul afiseaza data si ora curenta a sistemului:\n");
getdate(&today);
printf("Data de astazi este: %d/%d/%d\n",
today.da_day,today.da_mon,today.da_year);
gettime(&now);
printf("Ora este: %2d:%2d:%2d:%2d\n",
now.ti_hour,now.ti_min,now.ti_sec,now.ti_hund);
}
________________________________________________________________________
/* a) Sa se descrie tipurile punct si dreapta ca structuri;
b) Sa se defineasca o functie avind ca parametri doua drepte , un punct
si o variabila booleana , care stabileste daca cele doua drepte se
intersecteaza sau nu ; cele doua situatii sint separate de variabila
booleana . Daca se intersecteaza se calculeaza si returneaza punctul
de intersectie;
c) Sa se scrie un program care citeste datele pentru n drepte ( n<= 100 )
si afiseaza perechile de drepte paralele , iar pentru cele care se
intersecteaza coordonatele punctului de intersectie;*/
#include<stdio.h>
struct punct
{
float x,y;
};
struct dreapta
{
struct punct p1;
p.y=p1*p.x+b1;
}
}
}
void main()
{
int nr_drepte,i,j;
int paralele;
struct dreapta d1,d2,d[100];
struct punct p;
float x1,y1,x2,y2;
printf("\nDeterminam pozitia relativa (paralele/intersectie)"
" pentru mai multe drepte.\n");
printf("Numarul de drepte: ");
scanf("%d",&nr_drepte);
for(i=0;i<nr_drepte;i++)
{
printf("Coordonate dreapta (%d) x1/y1, x2/y2 = ", i+1);
scanf("%f%f%f%f", &x1, &y1, &x2, &y2);
d[i].p1.x=x1; d[i].p1.y=y1; d[i].p2.x=x2; d[i].p2.y=y2;
}
for(i=0;i<nr_drepte-1;i++)
for(j=i+1;j<nr_drepte;j++)
{
intersectie(d[i],d[j],p,paralele);
if(paralele)
{
printf("\nDreptele %d si %d sunt paralele.",i+1,j+1);
}
else
{
printf("\nDreptele %d si %d nu sunt paralele.",i+1,j+1);
printf(" Punctul de intersectie: x=%.2f y=%.2f",p.x,p.y);
}
}
printf("\n");
}
________________________________________________________________________
/* Un experiment fizic este precizat prin numarul de determinari si valorile
masurate (numarul de determinari este maxim 100).
a) Sa se descrie structura experimentului folosind tipul structura;
b) Sa se defineasca o functie, avand ca parametru un experiment,care
calculeaza media aritmetica a masuratorilor nenule;
c) Sa se defineasca o functie, avand ca parametrii un experiment si
o valoare reala, care anuleaza (le face zero) toate determinarile
void main(){
struct ex tt;
int i;
float med;
printf("\nProgramul citeste un experiment, calculeaza media determinarilor,\n"
"anuleaza determinarile care depasesc dublul mediei si calculeaza\n"
"si afiseaza media determinarilor ramase.\n");
printf("\nCate determinari are experimentul ? ");
scanf("%d",&tt.nr_determ);
for (i=0;i<tt.nr_determ;i++)
{
printf("Introduceti valoarea (%d) = ",i+1);
scanf("%d",&tt.val_masurata[i]);
}
med=medie_nenula(tt);
afisare(tt);
anulare(&tt,2*med);
printf("Valorile ramase dupa anularea celor mai mari decat dublul mediei:\n");
afisare(tt);
printf("Media masuratorilor ramase: %f\n",medie_nenula(tt));
}
________________________________________________________________________
/*
6. Se cosidera urmatoarele definiri de tipuri :
#define NR_MAX_ORASE 20
struct tip_oras
{ char nume[15];
char tara[15];
float nr_loc;
float supraf;
int vechime;
struct tip_oras orase[NR_MAX_ORASE] ;
Se cere sa se defineasca:
a) O functie de initializare a informatiilor referitoare la o lista
de orase ;
b) o functie care returneaza indicele orasului , din lista , a carui
populatie este cea mai apropiata ca numar de o valoare de tip nr_loc
transmisa ca parametru;
c) programul care citeste datele despre un numar de orase si listeaza
informatiile referitoare la orasul cu numarul de locuitori , cel mai
apropiat de un numar specificat.
d) procedurile care listeaza ordonat orasele dupa nume ,dupa numar de
locuitori , suprafata , vechime , tari ;
e) programul care afiseaza orasele in ordinea mentionata mai sus.
*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define NR_MAX_ORASE 20
struct tip_oras
{
char nume[15];
char tara[15];
float nr_loc;
float supraf;
int vechime;
};
struct tip_oras orase[NR_MAX_ORASE] ;
void initializare(int nr_orase)
{
int i;
float suprafata, numar_loc;
for (i=0;i<nr_orase;i++)
{
printf("\nIntroduceti nume oras (%d) : ",i+1);
scanf("%s",orase[i].nume);
printf("Introduceti numele tarii careia ii apartine : ");
scanf("%s",orase[i].tara);
printf("Introduceti numarul de locuitori : ");
scanf("%f",&numar_loc);
orase[i].nr_loc = numar_loc;
printf("Introduceti suprafata: ");
scanf("%f",&suprafata);
orase[i].supraf = suprafata;
printf("Introduceti vechimea : ");
scanf("%d",&orase[i].vechime );
}
}
int indice( float pop, int nr_orase)
{
int j, ind_posibil;
long int posibil;
posibil=fabs(pop-orase[0].nr_loc);
ind_posibil=0;
for (j=1;j<nr_orase;j++)
{
if ( fabs (pop-orase[j].nr_loc) < posibil)
{
posibil=fabs (pop-orase[j].nr_loc);
ind_posibil=j;
}
}
return(ind_posibil);
}
main()
{
float pop_ceruta;
int i,nr_de_orase;
clrscr();
printf("\nIntroduceti numarul de orase: ");
scanf("%d",&nr_de_orase);
initializare(nr_de_orase);
printf("\nOrasele introduse sunt:\n");
for (i=0;i<nr_de_orase;i++)
{
printf("%s ",orase[i].nume);
}
printf("\nIntroduceti populatia care o cautati : ");
scanf("%f",&pop_ceruta);
i=indice(pop_ceruta,nr_de_orase);
printf("\nCel mai apropiat, ca populatie, este urmatorul oras:\n");
printf ("\n Orasul are indicele: %d ",i+1);
printf("\n Numele orasului este: %s",orase[i].nume);
printf("\n Numarul de locuitori este: %f",orase[i].nr_loc);
printf("\n Suprafata este: %f",orase[i].supraf );
printf("\n Vechimea este: %d ani",orase[i].vechime);
printf("\n Tara: %s\n",orase[i].tara);
}
________________________________________________________________________
/*
5. Se considera urmatoarele definiri de date :
#define DIM_MAX 100
struct tip_st_zbor
{ int numar_zbor;
char destinatie[15];
char data_plecare[10];
char companie[10];
float cost;
}
struct tip_st_zbor zbor[DIM_MAX];
Sa se defineasca :
a) o functie de initializare a informatiilor referitoare la
zborurile de pe un aeroport;
b) o functie care afiseaza numele companiilor ce au curse pe o anumita
{
printf("%d - ", zbor[i].numar_zbor);
printf("%s - ", zbor[i].destinatie);
printf("%s - ", zbor[i].data_plecare);
printf("%s - ", zbor[i].companie);
printf("%f\n", zbor[i].cost);
}
}
void Afis(ZBOR zbor[DIM_MAX], int i)
{
printf("%d - ", zbor[i].numar_zbor);
printf("%s - ", zbor[i].destinatie);
printf("%s - ", zbor[i].data_plecare);
printf("%s - ", zbor[i].companie);
printf("%f\n", zbor[i].cost);
}
void Testare(ZBOR zbor[DIM_MAX], int n)
{
char cRuta[15];
printf("Dati destinatia avionului cautat:");
scanf("%s",cRuta);
for (i=0; i<n; i++)
if (strcmp(cRuta, zbor[i].destinatie)==0)
Afis(zbor, i);
}
void main()
{
clrscr();
printf("\nProgramul citeste informatiile referitoare la zborurile\n"
"de pe un aeroport (numar, data, compania, pret,..)\n"
"si listeaza aceste zboruri, dupa care listeaza numai zborurile\n"
"catre o anumita destinatie specificata de utilizator.\n");
printf("Dati numarul zborurilor: ");
scanf("%d",&n);
Initializare(zbor, n); /* Initializeaza vectorul de structuri */
printf("\n");
Afisare(zbor, n); /* Afiseaza toate elementele vectorului de structuri */
Testare(zbor, n); /* Daca avionul are o anumiota ruta, afiseaza datele..*/
getch();
}
________________________________________________________________________
/*
programul listeaza angajatii, unei firme, dupa tipul pregatirii:
- fara pregatire;
- cu scoala generala, pentru care se specifica numarul de clase;
- cu liceu : anul absolvirii liceului si media;
- cu facultate: universitatea, facultatea, anul abs. si media
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#define MAXNUME 20
#define MAXPERS 50
main()
{
enum pregatire
{ fara , scgen , liceu , facultate };
union u_studii
{
struct /* studii: facultate
*/
{
char nume_univ[MAXNUME];
char nume_facult[MAXNUME];
int
anf;
double mediaf;
} st_univ;
struct /*
studii: liceu */
{
int
anl;
double medial;
}
st_liceu;
int
nr_clase;
/* studii: scoala generala
*/
};
struct
{
char nume[MAXNUME];
char prenume[MAXNUME];
int
varsta, sex;
enum pregatire
preg;
union u_studii studii;
} angajat[MAXPERS];
enum pregatire sel_preg;
int
i, n;
char tip_pregatire[MAXNUME];
double val;
clrscr();
printf("\nProgramul listeaza angajatii, unei firme, dupa tipul pregatirii:\n"
"\t- fara pregatire;\n"
"\t- cu scoala generala, pentru care se specifica numarul de clase;\n"
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#define MAXNUME 20
#define MAXPERS 50
main()
{
enum pregatire
{ fara , scgen , liceu , facultate };
union u_studii
{
struct /* studii: facultate
*/
{
char nume_univ[MAXNUME];
char nume_facult[MAXNUME];
int
anf;
double mediaf;
} st_univ;
struct /*
studii: liceu */
{
int
anl;
double medial;
}
st_liceu;
int
nr_clase;
/* studii: scoala generala
*/
};
struct
{
char nume[MAXNUME];
char prenume[MAXNUME];
int
varsta, sex;
enum pregatire
preg;
union u_studii studii;
} angajat[MAXPERS];
enum pregatire sel_preg;
int
i, n;
char tip_pregatire[MAXNUME];
double val;
clrscr();
printf("\nProgramul listeaza angajatii, unei firme, dupa tipul pregatirii:\n"
"\t- fara pregatire;\n"
"\t- cu scoala generala, pentru care se specifica numarul de clase;\n"
"\t- cu liceu : anul absolvirii liceului si media;\n"
"\t- cu facultate: universitatea, facultatea, anul abs. si media.\n");
printf ("Numarul de angajati ai firmei este:");
scanf ("%d", &n);while(getchar() != '\n');
}
printf ("Angajatii cu ce fel de pregatire doriti sa fie listati?\n");
gets (tip_pregatire); /* tipul de angajati ce se doreste a fi listati */
switch ( tip_pregatire[0] )
{
/* tiparire antet lista */
case 'f':
case 'F':
sel_preg = fara;
printf("Lista angajatilor fara pregatire:\n");
break;
case 's':
case 'S':
sel_preg = scgen;
printf("Angajatilor cu studii scoala generala(nr.clase):\n");
break;
case 'l':
case 'L':
sel_preg = liceu;
printf("Lista angajatilor cu studii liceul:\n");
break;
case 'u':
case 'U':
sel_preg = facultate;
printf("Lista angajatilor cu studii universitare:\n");
break;
};
for ( i = 0 ; i < n ; ++i )
if ( angajat[i].preg == sel_preg )
{
printf ("%-*s %-*s, varsta: %2d, sex:", MAXNUME, angajat[i].nume,
MAXNUME, angajat[i].prenume, angajat[i].varsta);
switch ( angajat[i].sex )
/* tiparire sex */
{
case 0 :printf("femeie\n");
break;
case 1 :printf("barbat\n");
break;
}
}
}
________________________________________________________________________
/* Program - exemplu de alocare dinamica de memorie; se aloca dinamic
memorie pentru 40 de valori intregi, care sunt apoi initializate,
tiparite, dupa care se elibereaza memoria alocata*/
#include <stdio.h>
#include <stdlib.h> /* sau alloc.h */
main( )
{ int *ptr, val;
ptr = (int*) malloc (40*sizeof (int) );
printf("\nProgramul aloca dinamic memorie pentru 40 de valori intregi,\n"
char s[80];
char *ptrc;
int i;
printf("\nProgramul citeste un sir de caractere, dintr-o linie de text si\n"
"afiseaza numai carterele de dupa primul spatiu.\n");
printf ("Introduceti un sir de caractere:\n");
gets(s); /* citeste un sir de caractere pana cand se tasteaza '\n' */
/* se determina primul spatiu sau sfarsit de sir */
if ( s[0] )
{
for ( i = 0 ; s[i] && s[i] != ' '; i++);
ptrc = &s[i+1];
printf("\nSirul de caractere de dupa primul spatiu:\n");
printf ("%s\n",ptrc);
/* sau puts (ptrc), tipareste sirul de dupa primul blanc */
}
else
printf("Sir vid de caractere.\n");
}
________________________________________________________________________
/* Programul afiseaza zilele saptamanii, dintr-un tablou de
pointeri la siruri de caractere (zilele sapamanii) */
#include <stdio.h>
main()
{
int i;
char *zile[] = {"Luni", "Marti", "Miercuri", "Joi", "Vineri",
"Sambata","Duminica"};
/* tiparim zilele saptamanii */
printf("\nProgramul afiseaza zilele saptamanii, dintr-un tablou de\n"
"pointeri la siruri de caractere (zilele saptamanii):\n");
for ( i = 0 ; i < 7 ; i++ )
printf("%-10s",zile[i]);
printf("\n");
}
________________________________________________________________________
/* Programul construieste, apoi tipareste, o lista de valori intregi,
de tip coada */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
struct intrare
{
int
valoare;
*ptr.p2 = i1-100;
printf("Valorile continute de structura (cei doi pointeri):\n");
printf("ptr.p1 = %p(%u), ptr.p2 = %p(%u)\n",ptr.p1, ptr.p1,
ptr.p2, ptr.p2);
printf("Valorile referite de cele doua variabile si de cei doi "
"pointeri\n(initilaizati cu adresele lor):\n");
printf ("i1 = %i ; *ptr.p1 = %i\n", i1, *ptr.p1);
printf ("i2 = %i ; *ptr.p2 = %i\n", i2, *ptr.p2);
}
________________________________________________________________________
/* Programul insumeaza elementele unui vector utilizand un pointer
pentru a referi elementele vectorului*/
#include <stdio.h>
void main ( )
{
int valori [10] = { 3,7, -9, 5, 18, 35, -11, 100, -225, 77 };
int sum = 0 , * ptr ;
printf("\nProgramul insumeaza elementele unui vector utilizand un pointer\n"
"pentru a referi elementele vectorului.\n");
int * ptr_sfarsit = valori + 10 ;
printf("Valorile componentelor vectorului sunt:\n");
for ( ptr = valori ; ptr < ptr_sfarsit ; ++ ptr )
{
printf("%5d",*ptr);
sum += *ptr ;
}
printf ("\nSuma valorilor este: %i.\n" , sum ) ;
}
________________________________________________________________________
/* Programul calculeaza suma elementelor de pe diagonala principala a
unei matrici, utilizand pentru adresarea elementelor matricii un pointer,
initializat pentru fiecare linie, cu adresa de inceput a liniei resp. */
#include <stdio.h>
#include <conio.h>
void main()
{
int vect[10][10];
int suma = 0, *ptr, n, i, j;
clrscr();
printf ("Programul calculeaza suma elementelor de pe diagonala principala\n"
"utilizand pentru adresare un pointer initializat la fiecare\n");
printf("ciclu cu adresa de inceput a liniei respective\n");
printf ("Dimensiune matrice(patrata):");
scanf ("%d", &n);
for ( i = 0 ; i < n ; i++)
for ( j = 0 ; j < n ; j++)
{
printf ("vect[%d][%d]=", i+1, j+1);
scanf ("%d", &vect[i][j]);
}
for ( i = 0 ; i < n ; i++)
{
ptr = vect[i];
suma += *(ptr+i);
}
printf ("Suma= %d \n", suma);
}
________________________________________________________________________
/*
Exemplificarea operatiilor cu pointeri */
#include<stdio.h>
main()
{
int vector[3]={100,200,300};
int *ptr1,*ptr2;
ptr1=vector; /* sau ptr1=&vector[0] sau ptr1=&vector */
ptr2=&vector[2]; /* sau ptr2=vector+2 */
printf("\nExemplificare utilizare pointeri.\n");
printf("Initializare pointeri cu adresele:\nprimului, respectiv ultimului"
" element din vector\n");
printf("Valoare prim element din vector, val. referita de pointer:\n");
printf("Vector[0]=%d, *ptr1=%d\n",vector[0],*ptr1);
printf("Adresa pointer si valoarea continuta de primul pointer:\n");
printf("&ptr1=%p (=%u), ptr1=%p (=%u)\n",&ptr1, &ptr1, ptr1, ptr1);
printf("Valoare ultim element din vector, val. referita de pointer:\n");
printf("Vector[2]=%d, *ptr2=%d\n",vector[2],*ptr2);
printf("Adresa pointer si valoarea continuta de al doilea pointer:\n");
printf("&ptr2=%p (=%u), ptr2=%p (=%u)\n",&ptr2, &ptr2, ptr2, ptr2);
ptr2++;
printf("Diferenta dintre cei doi pointeri, dupa incrementarea celui"
" de-al doilea:\n");
printf("ptr2-ptr1= %u\n",ptr2-ptr1); /* =3 */
}
________________________________________________________________________
/* numara cuvinte cheie C ; versiunea cu pointer */
/* deeclaratia externa keytab nu trebuie modificata,
dar main() si binsearch() trebuie modificate */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXWORD 100
int getword (char * , int );
struct key *binsearch (char * , struct key * ,int );
main ( )
{
char word [MAXWORD];
struct key *p ;
while (getword (word ,MAXWORD ) != EOF )
if (isalpha(word[0] ))
if ( (p=binsearch(word, keytab,NKEYS) ) !=NULL)
p->count++;
for (p = keytab; p < keytab + NKEYS; p++)
if (p->count > 0)
printf ("%4d %s\n", p->count,p->word);
return 0;
}
/* binsearch: cauta cuvantul in tab[0] ... tab[n-1] */
struct key *binsearch (char *word , struct key *tab , int n)
{
int cond ;
struct key *low = &tab[0];
struct key *high = &tab[n];
struct key *mid;
while (low < high ) {
mid = low + ( high-low ) / 2;
if ((cond = strcmp (word, mid ->word) ) < 0)
high = mid;
else if (cond > 0)
low = mid + 1 ;
else
return mid ;
}
return NULL;
}
________________________________________________________________________
/* getint: citeste urmatorul numar intreg de la tastatura intr-un pointer
*pn; functia returneaza 0, daca apare eroare la citire numar. */
#include <ctype.h>
#include <stdio.h>
void ungetch (int);
int getint ( int *pn )
{
int c , semn;
while ( isspace (c = getchar ()) ) ; /* ignora spatiile albe */
if ( !isdigit (c) && c != EOF && c !='+' && c !='-' )
{
ungetch (c) ; /* nu este un numar */
return 0 ;
}
semn = (c =='-') ? -1: 1;
if (c=='+' || c== '-' )
c=getchar( ) ;
for ( *pn = 0; isdigit (c) ; c = getchar ( ) )
*pn = 10* *pn + (c - '0');
*pn *= semn ;
if (c !=EOF)
ungetch (c) ;
return c;
}
void main () {
int *ptr_nr;
printf("\nProgramul citeste un numar intreg caracter cu caracter.\n");
printf("Si face conversia la un numar intreg.\n");
printf("Citirea se face pana la un carcatre diferit de cifra, sau ENTER.\n");
printf("Numarul de convertit: ");
if (!getint(ptr_nr))
printf("Nu s-a introdus un numar corect.\n");
else
printf("Valoarea convertita: %d\n", *ptr_nr);
printf("Problema: "
"Scrieti o functie getfloat analoaga acestei functii (getint).\n");
}
________________________________________________________________________
/* Programul copiaza un sir de caractere, dintr-un vector intr-altul,
utilizand o functie: strcpy()-copiaza un sir de caractere, utilizand
un vector, pentru copiere */
#include <stdio.h>
void strcpy (char *s, char *t)
{
int i;
i=0;
while ((s[i] = t[i] ) != '\0')
i++;
}
main()
{
char sirs[200],sird[200];
printf("\nProgramul copiaza un sir de caractere, dintr-un vector intr-altul,\n"
"utilizand o functie.\n");
printf("Functia utilizeaza pentru copiere tablouri.\n");
printf("Introduceti un sir de caractere:\n");
gets(sirs);
strcpy( sird, sirs );
scanf("%lf%lf",&p1.x,&p1.y);
printf("Coordonatele punctului B(x,y):\n");
scanf("%lf%lf",&p2.x,&p2.y);
difx=p1.x-p2.x;
dify=p1.y-p2.y;
printf("Distanta dintre cele doua puncte este: %5.2lf\n",
sqrt(pow(difx,2)+pow(dify,2)));
}
________________________________________________________________________
/* programul deseneaza un numar n de patrate (dreptunghiuri) incluse unele in altele */
#include <graphics.h>
#include <stdio.h>
int initializare( int *pxmax, int *pymax )
/*
se initializeaza modul grafic, prin
*/
{
int gdriver = DETECT, gmode, errorcode;
/* initializare variabile grafice si locale */
initgraph( &gdriver, &gmode, "");
/* citeste rezultatul initializarii */
errorcode = graphresult();
/* se testeaza daca a aparut o eroare, la initializare, si se
tipareste un mesaj de eroare impreuna cu codul de eroare */
if (errorcode != grOk)
{
printf("Eroare de initializare a modului grafic: %s\n",
grapherrormsg( errorcode ) );
printf("Apasati o tasata pentru a termina programul.");
getchar();
return(1);
}
/* se seteaza culoarea cu care se deseneaza la valoarea maxima */
setcolor(getmaxcolor());
/* se determina dimensiunile maxime ale ecranului */
*pxmax = getmaxx();
*pymax = getmaxy();
return 0;
}
void desencub ( int xss, int yss , int xdj , int ydj )
{
line ( xss , yss , xdj , yss );
line ( xss , yss , xss , ydj );
line ( xss , ydj , xdj , ydj );
line ( xdj , yss , xdj , ydj );
}
main()
{
return 0;
}
void desencub ( int xss, int yss , int xdj , int ydj )
{
line ( xss , yss , xdj , yss );
line ( xss , yss , xss , ydj );
line ( xss , ydj , xdj , ydj );
line ( xdj , yss , xdj , ydj );
}
main()
{
int xmax, ymax, midx , midy , i;
char mesaj [25];
if ( initializare( &xmax, &ymax) == 0 )
{
for ( i = 0; i <= 20 ; i += 5)
desencub(11 *i, 6 *i, xmax - 11*i , ymax - 6*i);
/* se tiparesc dimensiunile ecranului, in modul grafic in centrul acestuia*/
midx = xmax/2;
midy = ymax /2;
moveto ( midx-80 , midy );
sprintf (mesaj,"dim ecran = %d * %d",xmax,ymax);
outtext (mesaj);
/* se deseneaza o linie pe diagonala principala a ecranului */
line(0, 0, xmax, ymax);
/* se inchide modul grafic */
getchar();
closegraph();
}
}
________________________________________________________________________
/* Programul afiseaza valorile unui numar intreg in toate bazele
de la 2 la 16, utilizand pentru conversia intr-o baza data,
ca parametru, o functie (conversie).
*/
#include <stdio.h>
#define LUNG_MAX 32
const int baza_max = 16;
void main()
{
long int numar;
int domeniu;
void conversie (long int valoare, int baza);
printf ("\n\nProgramul afiseaza valoarea unui numar intreg in "
"toate bazele de la 2 la 16.\n");
printf ("Valoarea de convertit:");
baza = 10;
}
conversie();
}
void citeste_numar_baza(void)
{
printf ("Numar de convertit:");
scanf ("%d", &numar);
printf ("In baza:");
scanf ("%d", &baza);
}
void conversie (void)
{
char cifra_baza[]={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F'};
int index=0;
if (numar < 0)
{
printf("-");
numar = -numar;
}
do
{
numar_convertit[index] = numar % baza;
numar /= baza;
index ++;
} while (numar != 0);
for ( --index ; index >= 0 ; --index )
printf ("%c", cifra_baza[numar_convertit[index]]);
printf ("\n");
}
________________________________________________________________________
/* Programul determina cel mai mare divizor comun pentru perechi
de numere intregi, introduse de la tastatura,
pana se introduce o valoare egala cu zero, utilizand o functie
*/
#include <stdio.h>
int cmmdc (int a,int b)
{
int rest;
while ( b != 0 )
{
rest = a % b;
a = b;
b = rest;
}
return ( a );
}
void main ()
{
int cmmdc (int a, int b);
int x, y;
printf("\n\nProgramul determina \"cel mai mare divizor comun\","
"pentru perechi de numere.\nProgramul ia sfarsit "
"cand unul dintre cele doua numere este 0.\n");
printf ("Introduceti doua numere (0=stop): ");
scanf ("%d%d", &x, &y);
while ( ( x*y ) != 0 )
{
printf ("Cel mai mare divizor comun este :%d\n", cmmdc (x,y));
printf ("Introduceti doua numere (0=stop): ");
scanf ("%d%d", &x, &y);
}
}
________________________________________________________________________
/* Programul calculeaza si afiseaza sumele partiale ale seriei:
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + . . . + 1/n
afisarea se face sub forma unor numere rationale, de tip fractii ireductibile a/b.
Se utilizeaza doua functii:
- prima aduna doua fractii, si returneaza fractia rezultata;
- a doua simplifica o fractie, si o returneaza;
Transferul parametrilor se face prin referinta ( pointeri ).
*/
#include <stdio.h>
void main()
{
int nr_linii = 1;
long int numarator, numitor, i, n;
void aduna_fractii (long int *pa1,long int *pb1,long int pa2, long int pb2);
void simplifica (long int *pa, long int * );
printf("\n\nProgramul calculeaza si afiseaza sumele partiale ale seriei:\n"
"1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + . . . + 1/n\n"
"afisarea se face ca numar rational, "
"de tip fractie ireductibila a/b.\n");
printf("\nIntroduceti numarul n= ");
scanf("%li", &n);
numarator = 1;
numitor = 1;
printf("\n");
printf("%10li/%-10li ", numarator, numitor);
for ( i = 2 ; i <= n ; ++i)
{
}
void error ( char mesaj[] )
{
printf ( "%s", mesaj );
}
void main ()
{
struct s_coada *coada;
int i , val;
char optiune[15];
clrscr();
printf("\nProgramul implementeaza o lista de tip coada.\n");
do {
printf ("Optiune (Init, Push, Extract, Top, Display, Finish):");
scanf("%15s", optiune );
switch ( optiune[0] )
{
case 'd':
case 'D': if ( ! emptyqueue ( coada ) )
{ for ( i = coada->first; i <= coada->last ; i++ )
printf("%d -> ", coada -> elem [ i ]);
printf("NULL\n");
}
else error ("empty queue\n");
break;
case 'i':
case 'I': clrscr();
printf("\nProgramul implementeaza o lista de tip coada.\n");
initqueue ( coada); break;
case 'p':
case 'P': printf("Elementul de introdus in coada:");
scanf ("%d", &val);
enqueue ( coada , val );
break;
case 'e':
case 'E':
if ( ! emptyqueue ( coada ) )
{
printf("extracted element: %d\n", front ( coada ));
dequeue ( coada );
};
case 't':
case 'T':
if ( ! emptyqueue ( coada ) )
printf("First element is :%d\n",front(coada));
else
printf("Empty queue\n");
break;
}
} while ( optiune [0] != 'f' && optiune[0] != 'F' );
}
________________________________________________________________________
/* Se construieste tabloul coeficientilor dezvoltarii binomului (a+b)^n
n coeficienti
0 1
1 1 1
2 1 2 1
3 1 3 3 1
4 1 4 6 4 1
5 1 5 10 10 5 1
......................
utilizand functii pentru calculul combinarilor (factorialelor)
*/
#include <stdio.h>
#include <conio.h>
unsigned long fact(n){
unsigned long i;
unsigned long res=1;
for(i=1;i<=n;i++)
{
res=res*i;
}
return(res);
}
unsigned long combinari(unsigned long n,unsigned long k){
return(fact(n)/(fact(k)*fact(n-k)));
}
void main(){
unsigned long i,a;
int n;
clrscr();
printf("\n\nProgramul construieste tabloul coeficientilor "
"dezvoltarii binomului (a+b)^n.\n");
do
{
printf("Introduceti n (max. 12): ");
scanf("%d",&n);
} while (n<0 || n>12);
printf(" n | Coeficenti\n");
for (i=0;i<=n;i++)
{
printf("%2d | ",i);
for(a=0;a<i+1;a++)
{
printf("%3d ",combinari(i,a));
}
printf("\n");
}
}
________________________________________________________________________
/* Programul citeste un set de linii de text si
afiseaza linia cea mai lunga; se utilizeaza variabile globale */
#include <stdio.h>
#include <conio.h>
#define MAXLINIE 10
/* lungimea curenta a liniei */
int max ;
/* lungimea maxima determinata */
char linie [ MAXLINIE ] ;/* linia curenta */
char cea_mai_lunga [ MAXLINIE ] ;/* linia cea mai lunga, salvata */
int getline ( void ) ;
void copy ( void ) ;
void main ( )
{
int lung ;
extern int max ;
extern char cea_mai_lunga [ ] ;
clrscr();
printf("Programul citeste linii de text pana la CTRL-Z,ENTER.\n");
printf("Si determina si afiseaza linia de text cea mai lunga.\n");
printf("Introduceti linii de text, separate cu ENTER:\n");
max = 0 ;
while ( ( lung = getline ( ) ) > 0 )
if ( lung > max )
{
max = lung ;
copy ( ) ;
}
printf("Linia cea mai lunga a fost: \n");
if ( max > 0 )
/* aceasta a fost linia */
printf ("%s" , cea_mai_lunga);
}
/* getline : versiunea specializata */
int getline ( void )
{
int c, i;
return ( s->sp == 0 );
};
void push ( struct s_stiva *s, int el )
{
void error ( char mesaj[] );
if ( s -> sp == MAXSTACK )
error("stack full\n");
else
{
s -> sp ++;
s -> elem[s -> sp ] = el;
}
};
int pop ( struct s_stiva *s )
{
void error ( char mesaj[] );
int ts;
if ( emptystack ( s ) )
error ("empty stack\n");
else
{
ts = s -> elem [ s -> sp ];
s -> sp --;
return ( ts );
}
};
int top ( struct s_stiva *s)
{
void error ( char mesaj[] );
if ( emptystack ( s ) )
error ("empty stack\n");
else
return ( s -> elem [ s -> sp ] );
}
void error ( char mesaj[] )
{
printf ( "%s", mesaj );
}
main ()
{
struct s_stiva *stiva;
int i , val;
char optiune[15];
clrscr();
printf("\nProgramul implementeaza o stiva si operatiile cu aceasta.\n");
do {
printf ("Optiune (Init, Push, Extract, Top, Display, Finish):");
scanf("%15s", optiune );
switch ( optiune[0] )
{
case 'd':
case 'D': if ( ! emptystack ( stiva ) )
{ for ( i = stiva -> sp ; i > 0 ; i-- )
printf("%d -> ", stiva -> elem [ i ]);
printf("NULL\n");
}
else error ("empty stack\n");
break;
case 'i':
case 'I': clrscr();
printf("\nProgramul implementeaza o stiva.\n");
initstack ( stiva); break;
case 'p':
case 'P': printf("Elementul de introdus in stiva:");
scanf ("%d", &val);
push ( stiva , val );
break;
case 'e':
case 'E': if ( ! emptystack ( stiva ) )
{
printf("extracted element: %d\n", top ( stiva ));
pop ( stiva );
}
else
error("empty stack\n");
break;
case 't':
case 'T': if (!emptystack(stiva))
printf("Elementul din varful stivei este: %d\n", top(stiva));
else
error("empty stack.\n");
break;
}
} while ( optiune [0] != 'f' && optiune[0] != 'F' );
}
________________________________________________________________________
/* Programul determina valoarea minima dintr-un sir de valori
utilizand pentru determinarea valorii minime o functie */
#include<stdio.h>
double minim (double vector[], int nr)
{
int i;
double val_min;
val_min = vector[0];
for ( i = 1 ; i < nr ; i++)
if ( vector[i] < val_min)
val_min = vector[i];
return ( val_min );
}
void main()
{
double sir[100], val;
int ne, i;
printf("\nProgramul determina valoarea minima dintr-un sir de valori.\n");
printf("Minimul este furnizat de o functie.\n");
printf ("Numar elemente din vector:");
scanf ("%d",&ne);
for ( i = 0 ; i < ne ; i++)
{
printf ("sir(%d)=", i+1);
scanf ("%lf", &val);
sir[i] = val;
}
printf ("Valoarea minima este:%.5le\n", minim(sir,ne));
}
________________________________________________________________________
/* Inmultirea unei matrici cu un scalar, utilizand functii */
#include <stdio.h>
void citire_matrice( double matc [][8], int *pnl, int *pnc )
{
int
i,j;
printf ("Dimensiunile matricii (linii,coloane):");
scanf ("%i%i", pnl, pnc);
for ( i = 0 ; i < *pnl ; i++)
for ( j = 0 ; j < *pnc ; j++)
{
printf("mat(%i,%i)=", i+1, j+1);
scanf("%lf", &matc[i][j]);
}
}
void multiplica_scalar ( double matm [][8], int nlinii,
int ncoloane,double valoare )
{
int i,j;
for ( i = 0 ; i < nlinii ;i++)
for ( j = 0 ; j < ncoloane ; j++)
matm[i][j] *= valoare;
}
void afisare_matrice ( double mata[][8], int linii, int coloane )
{
int
i, j, nr_elem_pe_linie = 1;
for ( i = 0 ; i < linii ; i++)
for ( j = 0; j < coloane ; j++, nr_elem_pe_linie++ )
{
printf ("mat(%i,%i)=%7.2f ", i+1, j+1, mata[i][j]);
if ( nr_elem_pe_linie % 4 == 0 )
printf("\n"); /* se afiseaza cate 4 valori/linie */
}
printf("\n");
}
void main()
{
double matrice [8][8], scalar;
int l, c;
printf("\nProgramul inmulteste o matrice (reala) cu un scalar.\n");
printf("Se utilizeaza functii pentru citire, inmultire si afisare.\n");
printf ("Introduceti matricea :\n");
citire_matrice ( matrice, &l, &c );
printf ("Scalarul cu care se inmultesc elementele matricii: ");
scanf ("%lf", &scalar );
multiplica_scalar ( matrice, l, c, scalar );
printf ("Matricea multiplicata cu scalarul %.3f este :\n", scalar );
afisare_matrice( matrice, l, c );
}
________________________________________________________________________
/* Program de ordonare crescatoare sir, utilizand metoda de selectie directa,
adica: din sirul initial se pune valoarea minima pe prima pozitie,
apoi pentru subsirul ramas [2,n] se pune valoarea minima din el pe
pozitia 2, s.a.m.d
*/
#include<stdio.h>
void sort (double sir[], int nrelem)
{
int i,j;
double aux;
for( i = 0 ; i < nrelem-1; ++i )
for( j = i+1;j < nrelem ; ++j)
if ( sir[i] > sir[j] )
{
aux = sir[i];
sir[i] = sir[j];
sir[j] = aux;
}
}
void main()
{
double sir[1000], val;
int ne, i;
printf("\nProgramul ordoneaza un sir de valori reale.\n");
printf("Functia ce ordoneaza utilizeaza metoda \"Selectiei directe\".\n");
printf ("Numarul de elemente din vector: ");
scanf ("%d",&ne);
for ( i = 0 ; i < ne ; ++i)
{
printf (" sir(%d)=", i+1);
scanf ("%lf", &val);
sir[i] = val;
}
sort(sir,ne);
for( i = 0 ; i < ne ; ++i )
printf ("sir(%2d)=%8.2lf ", i+1, sir[i]);
printf("\n");
}
________________________________________________________________________
/* Programul inmulteste o matrice cu un scalar, utilizand o
functie care inmulteste un vector cu un scalar
*/
#include <stdio.h>
void main ()
{
static int mat [3][4] = {
{ 1, 2, 3, 4},
{ 5, 7, 9, 11},
{ 16, 25, 36, 49}
};
int i, j;
void mult_scalar ( int vect [ ] , int dim, int scalar );
printf("\nProgramul inmulteste o matrice cu un scalar, utilizand\n"
"o functie care inmulteste un vector cu un scalar.\n");
printf("Maticea initiala este:\n");
for ( i = 0 ; i < 3 ; i++ )
{
for ( j = 0 ; j < 4 ; j++ )
printf ("m(%d,%d)=%d ", i+1, j+1, mat [i][j] );
putchar ( '\n' );
}
printf("Scalarul cu care se inmulteste: 2.\n");
printf("Matricea rezultata:\n");
mult_scalar ( mat, 3*4, 2 ); /* se inmultesc cele 3*4 = 12 elemente cu 2 */
return gasit ;
}
/* getline : citeste o linie in s, si returneaza lungimea */
int getline ( char s[ ] , int lim )
{
int c, i;
for ( i = 0 ; (i< lim - 1) && (c = getchar ()) != EOF && c!='\n'; ++i )
s[ i ] = c ;
s[ i ] = '\0' ;
return i ;
}
________________________________________________________________________
/* sortarea liniilor se poate face lexicografic sau numeric; algoritmul de sortare este
indepenedent de
operatia de comparare si interschimbare a obiectelor de sortat;
din acest motiv putem transmite diferite functii pentru comparare si interschimbare, astfel
ca putem
aranja sortarea in functie de anumite criterii. Vom utiliza o functie strcmp pentru
comparare lexicografica si o functie numcmp care realizeaza comparatia valorilor
numerice ale liniilor si returneaza
acelasi tip de indicator de conditie ca functia strcmp. Una dintre aceste functii va fi
transmisa printr-un pointer ca argument la functia qsort, pentru a face sortarea adecvata.
*/
#include <stdio.h>
#include <string.h>
#define MAXLINII 5000
/* numarul maxim de linii de sortat */
char ptr_linie [MAXLINII] ;
/* pointeri la liniile de text */
int cit_linii (char *ptr_linie [ ], int nr_linii );
void scrie_linii (char *ptr_linie [ ] , int nr_linii);
void qsort (void *ptr_linie [ ] , int stanga , int dreapta ,
int (*comp) (void *, void *));
int numcmp ( char *, char *);
/* sorteaza liniile */
main (int argc , char *argv[ ] )
{
int nr_linii ;
/* number de linii citite */
int numeric =0;
/* 1 daca se face sortare numerica */
if (argc > 1 && strcmp (argv [1] ,"-n") == 0 )
numeric = 1;
if (( nr_linii = cit_linii ( ptr_linie , MAXLINII)) >=0)
{
qsort (( void **) ptr_linie , 0, nr_linii - 1,
(int (*) (void*, void*)) (numeric ? numcmp : strcmp ));
scrie_linii (ptr_linie , nr_linii );
return 0;
}
else
{
printf ("numar prea mare de linii pentru a fi sortate\n ");
return 1;
}
}
/* qsort: sorteaza v[stanga]... v[dreapta] in ordine craescatoare */
void qsort (void *v[ ] , int stanga , int dreapta ,
int (* comp ) ( void *,void *) )
{
int i , ultim ;
void swap (void *v [ ] , int , int );
if ( stanga >= dreapta ) /* nu face nimic daca vectorul */
return;
/* mai putin de doua elemente */
swap (v, stanga , (stanga + dreapta )/2 );
ultim = stanga ;
for (i = stanga+1; i <= dreapta ; i++ )
if ( ( *comp) (v[i], v[stanga] ) < 0 )
swap ( v, ++ ultim , i );
swap (v, stanga , ultim );
qsort (v, stanga, ultim-1, comp);
qsort (v, ultim+1 , dreapta ,comp );
}
# include <stdlib.h>
/* numcmp : compara numeric doua siruri de caractere s1 si s2 */
int numcmp (char *s1, char *s2 )
{
double v1, v2 ;
v1 = atof (s1);
v2 = atof (s2);
if (v1 <v2 )
return - 1;
else if ( v1 > v2 )
return 1;
else
return 0;
}
________________________________________________________________________
/* constiva.cpp - prog. construieste o stiva de numere intregi, distincte,
pe care o afiseaza, utilizand functiile: adauga_stiva si afisare_stiva */
/*
Alte probleme propuse:
- construirea unei liste ordonate de numere;
return(NULL);
}
else
{ptr_stiva->valoare=val;
ptr_stiva->nr_aparitii=1;
ptr_stiva->urmator=ultimul;
return(ptr_stiva);
}
}
}
}
void afisare_stiva(struct s_stiva *ultim)
{
int nr_val_linie = 0;
while (ultim!=NULL)
{
printf("%2d(%d)-> ", ultim->valoare, ultim->nr_aparitii);
ultim=ultim->urmator;
nr_val_linie++; /* contor pentru nr. de valori afisate pe linie */
if (nr_val_linie%8==0)
printf("\n");
}
printf ("\n");
}
void eliberare_spatiu (struct s_stiva *ptrs){
struct s_stiva *p=ptrs;
while(p){ptrs=p;
p=p->urmator;
free(ptrs);
}
}
void main()
{
struct s_stiva *ultim=NULL;
int numar;
clrscr();
printf("Prg. construieste si afiseaza o stiva de nr. intregi, distincte.\n");
printf("Introducerea se termina cu EOF(CTRL-Z, ENTER.\n");
printf("Introduceti numar: ");
while(scanf("%d", &numar)!=EOF)
{if((ultim=adauga_stiva(ultim, numar))==NULL)
break;
printf("Introduceti numar: ");
}
afisare_stiva(ultim);
eliberare_spatiu(ultim);
}
________________________________________________________________________
/* Programul realizeaza conversia unui sir de caractere,
din linia de comanda,la o valoare numerica */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
main (int argc, char *argv[])
{
const int baza = 10;
char *ptr_sf;
long int val_int;
double val_reala;
int i;
printf("\n\nProgramul determina tipul unor valori numerice (intregi sau "
"reale)\ncitite din linia de comanda, la lansarea programului.\n");
if (argc < 2)
printf ("Utilizare: %d numere\n", argv[0]);
else
for (i = 1 ; i < argc ; i++)
{
val_int = strtol (argv [i] , &ptr_sf, baza);
if ( (*ptr_sf) == '\0')
printf ("Argumentul %d este un numar intreg: %li\n",i, val_int);
else if (ispunct (*ptr_sf))
{
val_reala = strtod (argv[i], &ptr_sf);
if ( (*ptr_sf) == '\0')
printf ("Argumentul %d este un numar real: %lf\n",
i, val_reala );
else
printf ("Argumentul %d nu este o valoare numerica\n",i);
}
else
printf ("Argumentul %d nu este o valoare numerica\n",i);
}
printf("\n");
}
________________________________________________________________________
/* Programul inverseaza tipul de caracter dintr-un text:
de la litera mare la litera mica si invers */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LIMITA 30
#define DIMENS 81
void main()
{
void transforma (char linie[]);
char text [LIMITA] [DIMENS];
int nr_linie = 0, i;
printf("\nProgramul inverseaza tipul literelor (mici <-> mari) dintr-un text.\n");
printf("Introduceti cel mult %d linii pentru transformare\n", LIMITA);
printf("Introducerea se termina cu ENTER, pe o linie noua\n");
while (nr_linie < LIMITA && gets( text[nr_linie] ) != NULL &&
strcmp (text[nr_linie],"") != 0)
nr_linie++;/* numarul liniei curente din vectorul de siruri de caractere */
for (i = 0 ; i < nr_linie ; i++)
{
transforma (text[i]);
puts (text[i]);
}
}
void transforma (char *ptr_car)
{
while (*ptr_car != '\0')
{
if ( isupper (*ptr_car) )
*ptr_car = tolower ( *ptr_car );
else if ( islower ( *ptr_car ) )
*ptr_car = toupper ( *ptr_car );
ptr_car++;
}
}
________________________________________________________________________
/* Programul citeste siruri de caractere si realizeaza
sortarea (ordonarea) lor*/
#include <stdio.h>
#include <string.h>
#define DIMENS 81
#define LIMITA 30
#define STOP ""
main()
{
void sort_sir ( char *sirc[], int lung );
static char intrare[LIMITA][DIMENS];/* vector ce memoreaza intrarile */
char *ptr_str [LIMITA]; /* vector de variabile pointer */
int contor = 0, cont_tip;
printf("\nProgramul sorteaza lexicografic linii de text.\n");
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void itoa ( int n, char s[ ] )
{
int i, semn ;
if ( ( semn = n ) < 0 ) /* memoreaza semnul */
n = - n ; /* transforma n-ul in pozitiv */
i=0;
do {
/* genereaza cifrele in ordine inversa */
s[i++] = n % 10 + '0' ; /* ia urmatoarea cifra */
} while ( ( n /= 10 ) > 0 ) ; /* continua cat timp mai sunt cifre */
if ( semn < 0 )
s[i++] = '-' ;
s[i] = '\0' ; /* pune caracterul de sfarsit de sir */
reverse (s) ; /* apeleaza functia de inversare a ordinii caracterelor */
}
/* deoarece numarul a fost obtinut in ordine inversa */
void main ()
{
char s[DIM_MAX];
int numar;
printf("\nProgramul converteste o valoare intreaga [-32767,+32767]\n"
"intr-un sir de caractere.\n");
printf("Se utilizeaza o functie \"itoa\" Int -> TO -> Ascii.\n");
printf("Introduceti valoarea intreaga de convertit la sir de caractere:\n");
scanf("%6d", &numar);
itoa(numar, s);
printf("Sirul de caractere convertit este:\n");
puts(s);
}
________________________________________________________________________
/* conversia unui sir la un intreg */
#include <stdio.h>
#include <stdlib.h>
char string[] = "1234";
main()
{
int val;
val = atoi( string );
printf("Numar = %d\n", val );
}
________________________________________________________________________
/* convresia unui intreg la un sir de caractere */
#include <stdio.h>
#include <stdlib.h>
main()
{
int numar;
char sircar[20];
printf("Introduceti un intreg: ");
scanf(" %d", &numar );
printf("Ca sir de caractere numarul este \"%s\"\n", itoa(numar, sircar, 10));
}
________________________________________________________________________
/* Programul actualizeaza un fisier de produse, PRODUSE.DTA,
creat de programul initprod.c, cu datele curente introduse de la
tastatura
*/
#include <stdlib.h>
#include <stdio.h>
#define MAX_PROD 100
void main()
{
struct struct_produs {
char nume [20];
int nr_prod;
double stoc;
float pret;
char moneda [10];
};
struct struct_produs *prod;
FILE *ptr_fis;
int pnr;
double stoc;
float pret;
char optiune[10];
printf("Initializare floating point, real=");
scanf("%lf", &stoc);
printf("\nProgramul actualizeaza un fisier de produse, PRODUSE.DTA,\n"
"creat de programul \"initprod.c\", cu datele curente introduse "
"de la tastatura.\n");
if ( (ptr_fis = fopen ("produse.dta", "r+b")) == NULL )
{
printf ("Fisierul: PRODUSE.DTA nu poate fi deschis"
" pentru citire/scriere \n");
exit ( 1 );
}
else
{
printf ("Numarul produsului de actualizat (0=stop):");
scanf ("%d", &pnr); while ( getchar() != '\n');
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIMBUF 1024
char buffer[DIMBUF];
void adauga (FILE *sursa, FILE *dest);
void main (int argc, char*argv[])
{
FILE *pfa, *pfr;
int nrfisier;
/*Daca sunt mai putin de doua argumente in linia de comanda ,
programul se termina*/
clrscr();
printf("Programul concateneaza mai multe fisiere, intr-unul singur.\n"
"Numele fisierelor sursa si destinatie se transmit prin linia de\n"
"comanda:\tadauga fis_sursa1, . . . fis_sursa2, fis_dest\n");
if ( argc < 3 )
{
printf ("Utilizare:%s fisiere_sursa fisier_destinatie\n", argv[0]);
exit(1);
}
/*daca nu se poate deschide fisierul destinatie:EROARE si STOP*/
if ( (pfa = fopen (argv[argc-1], "a") ) == NULL)
{
printf ("Nu se poate deschide fisierul:%s\n", argv[argc-1]);
exit(2);
}
/*Se initializeaza un buffer de 1024 octeti pt acest fisier*/
if ( setvbuf (pfa, NULL, _IOFBF, DIMBUF) != 0 )
{
fputs ( "Nu se poate crea bufferul de iesire\n", stderr );
exit(3);
}
/* pentru fiecare fisier din linia de comanda:
- daca are acelasi nume cu destinatia -> trece la fisierul urmator;
- daca nu poate fi deschis pentru citire -> urmatorul fisier;
- adauga continutul fisierului la fisierul destinatie */
for (nrfisier = 1 ; nrfisier < argc-1 ; nrfisier++)
{
if (strcmp (argv[argc-1], argv[nrfisier]) == 0)
printf ( "Nu se poate adauga fisierul la el insusi\n" );
else if ( (pfr = fopen (argv[nrfisier], "r")) == NULL )
printf ("Nu se poate deschide fisierul: %s\n", argv[nrfisier]);
else
{
else
{
prod -> nume[0] = ' ';
prod -> nume[1] = '\0';
prod -> stoc = 0;
prod -> pret = 0;
prod -> moneda[0] =' ';
prod -> moneda[1] = '\0';
for ( i = 1 ; i <= MAX_PROD ; i++ )
{
prod->nr_prod = i;
fwrite ( prod, sizeof ( struct struct_produs), 1, ptr_fis);
}
fclose(ptr_fis);
printf("\nA fost initializat fisierul \"PRODUSE.DTA\"\n");
}
}
________________________________________________________________________
/* Programul afiseaza pe display fisierul PRODUSE.DTA,
creat de programul 'initprod.c 'si actualizat de programul 'actuprod.c'*/
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#define MAX_PROD 100
main()
{
struct struct_produs {
char nume [20];
int nr_prod;
double stoc;
float pret;
char moneda [10];
};
struct struct_produs *prod;
FILE *ptr_fis;
int pnr;
double stoc; float pret;
char optiune[10];
clrscr();
printf("Programul listeaza produsele din fisierul \"PRODUSE.DTA\"\n");
if ( ( ptr_fis = fopen ( "produse.dta", "r+b") ) == NULL )
{
printf ("Fisierul: PRODUSE.DTA nu poate fi deschis"
" pentru citire/scriere \n");
exit ( 1 );
}
else
{
if ( ( ptr_fis = fopen ("PRODUSE.DTA", "rb")) == NULL )
{
printf("Fisierul PRODUSE.DTA,nu poate fi deschis pentru
citire\n");
exit(1);
}
else
{
while ( fread ( prod, sizeof ( struct struct_produs ), 1, ptr_fis ) == 1 )
if ( prod -> nume[0] != ' ')
printf("%-20s, cod:%3d, stoc:%8.2lf, pret:%6.2f, moneda:%5s \n",
prod->nume, prod->nr_prod, prod->stoc,
prod->pret, prod->moneda);
fclose ( ptr_fis );
}
}
printf("\n");
}
________________________________________________________________________
/* Programul realizeaza afisarea unui fisier in ordinea inversa;
fisierul de tiparit invers, de la coada la capat, se transmite
ca parametru, dupa numele programului,in linia de comanda */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define CTRL_Z '\032'
/* marcaj sfarsit fisier EOF */
void main (int argc, char *argv[])
{
char car;
FILE *pf;
long int contor, ultim;
clrscr();
printf("Programul afiseaza un fisier, transmis ca parametru, in linia\n"
"de comanda, in ordine inversa (de la sfarsit la inceput).\n");
if (argc != 2)
{
printf ("Lipseste numele fisierului din linia de comanda\n");
exit (1);
}
if((pf = fopen (argv[1], "r+b")) == NULL)
{
printf ("Nu se poate deschide fisierul:%s\n", argv[1]);
exit (1);
/* deschis in: binar,citeste binar */
}
fseek (pf, 0L, SEEK_END); /* pozitionare la sfarsit de fisier */
ultim = ftell (pf);
/* ultima pozitie */
char nume[20];
enum sex { barbat, femeie };
enum sport { fotbal, tenis, inot,volei };
float media;
Sa se construiasca un nou fisier, pe baza acestuia, care sa contina numai
studentii care joaca tenis si au media peste 9.
*/
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX_NOTE 15
#define MAX_NUME 20
main()
{
enum tsex {barbat, femeie};
enum tsport {fotbal, tenis, inot, volei};
struct struct_student {
char nume[MAX_NUME];
enum tsex sex;
enum tsport sport;
int nota[MAX_NOTE];
int nr_note;
float media;
};
struct struct_student *stud;
FILE *ptr_fis;
int i, j, ns;
char *materii[]={"Analiza","Desen","Programare C","Mecanica","Sport"};
char ssex[6], ssport[6];
float suma_note;
clrscr();
if ((ptr_fis = fopen("STUDENT.DAT", "wb")) == NULL )
{
printf ( "Fisierul:STUDENT.DAT, "
"nu poate fi deschis pentru scriere\n");
exit(1);
}
printf("Numarul de materii(note):");
scanf("%d",&stud->nr_note);
printf("Introduceti numarul de studenti: ");scanf("%d",&ns);
while(getchar() != '\n');
for (i=1;i<=ns;i++)
{
printf("Nume: ");
gets(stud->nume);
printf("Sex (barbat, femeie): ");
gets(ssex);
switch(ssex[0])
{
case 'f': case 'F': stud->sex=femeie; break;
case 'b': case 'B': stud->sex=barbat; break;
}
printf("Sport (fotbal, tenis, inot, volei): ");
gets(ssport);
switch(ssport[0])
{
case 'f': case 'F': stud->sport=fotbal; break;
case 't': case 'T': stud->sport=tenis; break;
case 'i': case 'I': stud->sport=inot; break;
case 'v': case 'V': stud->sport=volei; break;
}
suma_note = 0;
printf("Notele studentului la materiile:\n");
for (j=1; j<=stud->nr_note;j++)
{
printf("%s: ",materii[j]);
scanf("%d", stud->nota[j]);
suma_note += stud->nota[j];
}
while(getchar() != '\n');
stud->media = suma_note / stud->nr_note;
fwrite ( stud, sizeof ( struct struct_student), 1, ptr_fis);
}
fclose(ptr_fis);
if ((ptr_fis = fopen("STUDENT.DAT", "rb")) == NULL )
{
printf ( "Fisierul:STUDENT.DAT, "
"nu poate fi deschis pentru citire\n");
exit(1);
}
while (fread (stud, sizeof (struct struct_student),1, ptr_fis)!=0)
printf("%-*s\n", MAX_NUME, stud->nume);
fclose(ptr_fis);
}
________________________________________________________________________
/* Programul citeste linii de text de la tasatura, si depune
intr-un fisier (cuvinte.txt), cuvintele din acest text;
textul se termina cu RETURN la inceputul unei linii noi, sau
cu CTRL-Z, Return, oriunde in cadrul textului
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define LUNG 20
void main ()
{
FILE *pf;
char *cuvant;
clrscr();
printf("Programul adauga la un fisier de cuvinte (\"cuvinte.txt\")\n"
"cu cuvinte introduse de la tastatura, sau il creeaza(1-a data).\n");
if((pf=fopen("cuvinte.txt", "a+"))==NULL)
{
fprintf(stderr,"nu se poate deschide fisierul:cuvinte.txt\n");
exit(1);
}
puts("Introduceti cuvintele pt adaugare la fisier.");
puts("Pentru terminare tastati ENTER la inceputul unei linii noi, sau");
puts("CTRL-Z, RETURN, oriunde in cadrul textului");
while(gets(cuvant) != NULL && cuvant[0] != '\0')
fprintf(pf, "%s\n", cuvant);
puts("Fisierul contine cuvintele:"); /*trece automat la linie noua */
rewind(pf); /*pozitionare la inceputul fisierului*/
while(fscanf(pf, "%s", cuvant) == 1)
puts(cuvant);
fclose(pf);
}
________________________________________________________________________
/* Programul realizeaza afisare de fisiere, versiunea 1;
se copiaza, de fapt fisierul din linia de comanda la disply ("stdout") */
#include <conio.h>
#include <stdio.h>
main (int argc, char *argv[ ])
{
FILE *fp;
void filecopy (FILE * ,FILE *);
clrscr();
printf("Programul copiaza un fisier din linia de comanda la \"stdout\"\n"
"Daca nu se transmite numele fisierului se copiaza intrarea.\n");
if (argc == 1) /* nu sunt argumente; se va copia intrarea standard*/
{
printf("Nu s-au introdus argumente in linia de comanda!!\n"
"Se va copia intrarea standard\n");
filecopy (stdin, stdout );
}
else
while (--argc > 0)
if (( fp= fopen ( *++argv, "r") ) == NULL)
{
printf("concat: nu se poate deschide %s\n", *argv);
return 1;
}
else
{
printf("Continutul fisierului %s, este:\n", *argv);
filecopy (fp, stdout);
fclose (fp);
printf("\n");
}
printf("\n\n");
return 0;
}
/* copiere fisier: copiaza fisierul ifp in fisierul ofp */
void filecopy (FILE *ifp ,FILE *ofp)
{
int c;
while ( (c = getc(ifp) ) != EOF)
putc (c, ofp);
}
________________________________________________________________________
/* Programul realizeaza afisare fisier, varianta 2, care afiseaza si
numele programului daca nu exista parametru in linia de comanda*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[ ])
{
FILE *fp;
void filecopy (FILE * ,FILE *);
char *prog = argv[0];
/* numele programului pentru raportare erori */
clrscr();
printf("\nProgramul realizeaza afisare fisier, varianta 2, care afiseaza\n"
"si numele programului daca nu exista parametru in linia de comanda.\n");
if (argc == 1) /* nu sunt argumente; copiaza intrarea standard */
filecopy (stdin, stdout);
else
while (--argc > 0)
if (( fp= fopen ( *++argv, "r") ) == NULL)
{
fprintf (stderr, "%s: nu se poate deschide %s\n",
prog, *argv );
exit(1);
}
else
{
filecopy (fp, stdout );
fclose(fp);
}
if (ferror (stdout) )
{
fprintf (stderr, "%s: eroare de scriere in stdout\n", prog );
exit (2);
}
exit (0);
}
/* copiere fisier: copiaza fisierul ifp in fisierul ofp */
void filecopy (FILE *ifp ,FILE *ofp)
{
int c;
while ( (c = getc(ifp) ) != EOF)
putc (c, ofp);
}
________________________________________________________________________
/* Programul citeste o lista de nume de fisiere din linia de comanda
si apoi afiseaza numele fiecarui fisier
urmat de ultimile 2(3) linii ale acelui fisier.
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main (int argc, char *argv[])
{
void afis_linie (char *nume, FILE *pfis, int ultimele_linii);
FILE *pf;
int fisier, ultim_lin = 2;
clrscr();
printf("Programul afiseaza ultimele %d linii ale fisierelor.\n", ultim_lin);
printf("Numele fisierelor sunt citite din linia de comanda.\n");
if (argc<2)
{
printf ("ERR: Lipsesc numele fisierelor din linia de comanda.\n");
exit (1);
}
for (fisier =1; fisier < argc; fisier++)
{
if ((pf = fopen (argv[fisier], "r"))== NULL)
{
fprintf (stderr, "Nu se poate deschide fisierul \"fis1.txt\"\n");
exit ( 1 );
}
puts ("Fisierul 1:");
while (gets (text1) != NULL && text1 [0] != '\0')
fprintf (pf1, "%s\n", text1);
fclose (pf1);
if ( ( pf2 = fopen ("fis2.txt", "wt") ) == NULL )
{
fprintf (stderr, "Nu se poate deschide fisierul \"fis2.txt\"\n");
exit ( 1 );
}
puts ("Fisierul 2:");
while (gets (text1) != NULL && text1 [0] != '\0')
fprintf (pf2, "%s\n", text1);
fclose (pf2);
if ( ( pf3 = fopen ("fis3.txt", "wt") ) == NULL )
{
fprintf (stderr, "Nu se poate deschide fisierul \"fis3.txt\"\n");
exit ( 1 );
}
pf1 = fopen ("fis1.txt", "rt");
while (fscanf (pf1, "%s", text1) == 1)
fprintf (pf3, "%s\n", text1);
fclose (pf1);
pf2 = fopen ("fis2.txt", "rt");
while (fscanf (pf2, "%s", text1) == 1)
fprintf (pf3, "%s\n", text1);
fclose (pf2);
fclose (pf3);
pf3 = fopen ("fis3.txt", "rt");
puts ("Fisierul concatenat: ");
while (fscanf (pf3, "%s", text1) == 1)
puts (text1);
fclose (pf3);
while (!kbhit());
}
________________________________________________________________________
/* Copierea unui fisier sursa intr-unul destinatie
Programul se va lansa astfel:
cop_fis.exe fis_sursa.txt fis_dest.txt
*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main ()
{
double ex, x, precizie, termen;
int n = 0;
printf ("Programul calculeaza exp(x), utilizand seria Taylor;\n"
"Introduceti x=");
scanf ("%lf", &x);
printf ("Precizia de calcul este:");
scanf ("%lf", &precizie);
ex = 1; termen = 1;
do
{
n++;
termen = termen * x / n;
ex = ex + termen;
} while ( termen > precizie );
printf ("seria Taylor exp(%f)=%20.14le, calculata dupa %d iteratii\n", x, ex, n);
printf ("Functia C exp(%f)=%20.14le\n\n", x, exp(x));
}
________________________________________________________________________
/* Programul calculeaza puterea unui numar real, la o putere reala x^n,
folosind metoda logaritmica:
y = x^n;
-> ln(y) = n*ln(x);
-> e^ln(y) = e^(n*ln(x));
-> y = e^(n*ln(x));
*/
# include <stdio.h>
# include <math.h>
main()
{
double x,y,n;
printf ("\nProgram de ridicare la o putere intreaga a unui numar real\n"
"\t\t(metoda logaritmica).\n");
printf ("\nIntroduceti numarul=");
scanf ("%lf", &x);
printf ("Introduceti puterea=");
scanf ("%lf", &n);
y = exp ( n * log ( x ) );
printf ("(%.2lf)^(%.2lf) = %.2lf\n\n", x, n, y);
}
________________________________________________________________________
/* Programul determina o radacina a unei functii f(x)definita de utilizator, separata intr-un interval (a,b),
utilizand metoda injumatatirii intervalului*/
# include <stdio.h>
/*
definirea unei functii de o variabila */
/*
f(x) = x^2 - 4x -5, care are solutiile x1 = -1, x2 = 5 */
double f ( double x )
{
double valf;
valf = x*x -4*x -5;
return ( valf );
}
void main()
{
double a, b, mijloc, precizia, modul;
int gasit = 0, nr_iteratii = 0;
printf("\nProgramul localizeaza o radacina a unei functii f(x), separata\n"
"intr-un interval (a,b), cu o anumita precizie data de utilizator,\n"
"utilizand metoda injumatatirii intervalului.\n");
printf("Functia utilizata pentru test este:\n"
"\t\tf(x) = x^2 - 4x -5, cu solutiile: x1=-1 si x2=5.\n");
printf ("Intervalul a,b in care este localizata o radacina: ");
scanf ("%lf", &a);
scanf ("%lf", &b);
printf ("Precizia de localizare a radacinii:");
scanf ("%lf", &precizia);
do
{
nr_iteratii++;
mijloc = (a+b)/2;
if ( f (a) * f (mijloc) < 0 )
b = mijloc;
else if ( f ( mijloc ) * f(b) < 0 )
a=mijloc;
else if ( f ( mijloc ) == 0 )
gasit = 1;
else
{
printf("In intervalul dat (%lf,%lf) nu se afla nici o "
"radacina.\n", a, b);
goto gata;
}
modul =a-b;
if ( modul < 0 )
modul = -modul;
} while ( modul > precizia && !gasit );
printf ("Solutia este : %lf, obtinuta dupa %d iteratii\n\n", ( a+ b)/2,
nr_iteratii);
gata:;
}
/* Programul determina o radacina a unei functii f(x)definita de utilizator, separata intr- un interval (a,b),
utilizand metoda coardei:
ecuatia coardei intre a si b este:
y=m*x+n
undem = ( f(b) - f(a) ) / ( b - a );
n = f(a) - m * a;
se determina pentru fiecare noua pereche ( a , b ) intersectia
coardei cu axa Ox, adica y = 0 :
x = -n / m;
Daca f(a) * f(x) < 0 atunci b = x;
daca f(x) * f(b) < 0 atunci a = x,
altfel s-a gasit radacina;
Algoritmul ia sfarsit cand (b-a) < precizia sau
pentru un numar maxim admis
de iteratii.
*/
#include <stdio.h>
#define MAX_ITERATII 1000
/*
definirea unei functii de o variabila */
/*
f(x) = x^2 - 4x -5, care are solutiile x1 = -1, x2 = 5 */
double f ( double x )
{
double valf;
valf = x*x - 4*x - 5;
return ( valf );
}
void main()
{
double a, b, x, x_vechi, m, n, precizia, modul;
int iteratie = 0, gasit = 0;
printf("\nProgramul localizeaza o radacina a unei functii f(x), separata\n"
"intr-un interval (a,b), cu o anumita precizie data de utilizator,\n"
"utilizand metoda \"coardei\".\n");
printf("Functia utilizata pentru test este:\n"
"\t\tf(x) = x^2 - 4x -5, cu solutiile: x1=-1 si x2=5.\n");
printf ("Intervalul a,b in care este localizata o radacina: ");
scanf ("%lf", &a);
scanf ("%lf", &b);
if ( f(a)*f(b) > 0 )
{
printf("In intervalul dat (%lf,%lf) nu se afla nici o "
"radacina.\n", a, b);
goto gata;
}
printf ("introduceti precizia de localizare a radacinii:");
scanf ("%lf", &precizia);
x=a;
do
{
x_vechi = x;
/* daca f(a)=f(b), se modifica putin unul dintre puncte (b+0.1) */
if ( f(b) == f(a) )
b+=0.1;
m = ( f(b) - f(a) ) / ( b - a ); /* panta coardei */
n = f(a) - m * a; /* termenul liber al ecuatiei coardei */
x = -n / m ; /* intersectia cu Ox */
if ( f (a) * f (x) < 0 )
b = x;
else if ( f (x) * f(b) < 0 )
a = x;
else if ( f(x) == 0 )
gasit = 1;
modul = x-x_vechi;
if ( modul < 0 )
modul = -modul;
iteratie++;
} while ( modul > precizia && iteratie < MAX_ITERATII && !gasit);
printf ("Solutia : %20.15lf , obtinuta dupa %d iteratii\n", x, iteratie);
gata:;
}
________________________________________________________________________
/* Programul construieste o coada utilizand o functie
adauga_coada, si apoi tipareste lista de valori intregi,
de tip coada
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_coada
{
int
valoare;
int
nr_aparitii; /* numarul de aparitii ale numarului in coada */
struct s_coada *urmator;
};
int adauga_coada ( struct s_coada *primul, int val )
{
struct s_coada *ptr_coada;
if ( primul == NULL )
{
primul = (struct s_coada *) malloc (sizeof(struct s_coada));
if ( primul == NULL )
{
printf("Coada goala!!\n");
while ( ptr != NULL )
{
printf ( "Numar: %d, numar de aparitii: %d\n", ptr -> valoare,
ptr -> nr_aparitii );
ptr = ptr -> urmator;
}
}
void main()
{
struct s_coada *prim = (struct s_coada *) malloc (sizeof(struct s_coada));
/* initializarea adresei variabilei 'prim'; altfel daca prim = NULL
functia 'adauga_coada' nu primeste o adresa valida la care incepe
lista si la care se face actualizarea (adaugare element sau daca
acesta exista se incrementeaza campul 'nr_aparitii')
*/
int numar;
prim -> valoare = 0;
prim -> nr_aparitii = 0;
prim -> urmator = NULL;
clrscr();
printf ("Programul construieste si afiseaza o coada (lista) de numere,\n"
"lista se va termina cu CTRL-Z, ENTER.\nProgramul "
"va afisa numerele din lista si frecventa aparitiei lor.\n");
printf ("Introduceti un numar:");
while ( scanf ("%d", &numar ) != EOF )
{
if (adauga_coada (prim , numar) == 0)
break;
printf ( "Introduceti numar:");
}
afisare_coada ( prim );
free ( prim );
}
________________________________________________________________________
/*
stiva_f.cpp - programul construieste o stiva utilizand o functie
adauga_stiva, si apoi tipareste lista de valori intregi, (stiva)
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_stiva
{
int valoare;
int nr_aparitii; /* numarul de aparitii ale numarului in stiva */
struct s_stiva *urmator;
};
struct s_stiva * adauga_stiva (struct s_stiva *ultimul, int val)
{
/* functia returneaza un pointer la ultimul element din stiva daca s-a putut
adauga un nou element, sau NULL daca nu s-a adaugat ("Memorie plina")
*/
struct s_stiva *ptr_stiva;
if (ultimul == NULL)
{
ultimul=(struct s_stiva *) malloc (sizeof(struct s_stiva));
if ( ultimul == NULL )
{
printf("Memorie plina\n");
return (NULL);
}
else
{
ultimul->valoare=val;
ultimul->nr_aparitii=1;
ultimul->urmator=NULL;
return (ultimul);
}
}
else
{
ptr_stiva=ultimul ;
while (ptr_stiva->valoare != val && ptr_stiva->urmator != NULL )
ptr_stiva=ptr_stiva->urmator;
if (ptr_stiva->valoare == val)
{ptr_stiva->nr_aparitii ++;
return (ultimul);
}
else
{
ptr_stiva=(struct s_stiva *) malloc(sizeof(struct s_stiva));
if (ptr_stiva == NULL)
{
printf("Memorie plina!\n");
return (NULL);
}
else
{
ptr_stiva->valoare=val;
ptr_stiva->nr_aparitii=1;
ptr_stiva->urmator=ultimul;
return (ptr_stiva);
}
}
}
}
void afisare_stiva (struct s_stiva * ultimul)
{
while (ultimul != NULL)
{
printf("%2d(%2d)->", ultimul->valoare, ultimul->nr_aparitii);
ultimul=ultimul->urmator;
}
printf("NULL\n");
}
main()
{
struct s_stiva *ultim = NULL, *ptrc;
int numar;
clrscr();
printf("Programul construieste si afiseaza o stiva de numere\n");
printf("Introduceti un numar:");
while (scanf("%d", &numar) != EOF)
{
if ((ptrc=adauga_stiva (ultim , numar)) == NULL)
break;
ultim=ptrc;
printf ( "Introduceti numar:");
}
afisare_stiva(ultim);
free (ultim);
}
________________________________________________________________________
/* Programul construieste o coada utilizand o functie
adauga_coada, si apoi tipareste lista de valori intregi, de tip coada */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_coada
{
int
valoare;
int
nr_aparitii; /* numarul de aparitii ale numarului in coada */
struct s_coada *urmator;
};
int adauga_coada ( struct s_coada *primul, int val )
{
struct s_coada *ptr_coada;
ptr_coada = primul ;
while ( ptr_coada -> valoare != val && ptr_coada -> urmator != NULL )
ptr_coada = ptr_coada -> urmator;
if ( ptr_coada -> valoare == val )
ptr_coada -> nr_aparitii ++;
else
{
ptr_coada -> urmator =
( struct s_coada *) malloc(sizeof (struct s_coada));
ptr_coada = ptr_coada -> urmator;
if ( ptr_coada == NULL )
{
printf ("Memorie plina!\n");
return ( 0 );
}
else
{
ptr_coada -> valoare = val;
ptr_coada -> nr_aparitii = 1;
ptr_coada -> urmator = NULL;
return ( 1 );
}
}
}
void afisare_coada ( struct s_coada * primul )
{
struct s_coada *ptr;
ptr = primul;
if (ptr == NULL)
printf("Coada goala!!\n");
while ( ptr != NULL )
{
printf ( "Numar: %d, numar de aparitii: %d\n", ptr -> valoare,
ptr -> nr_aparitii );
ptr = ptr -> urmator;
}
}
void main()
{
struct s_coada *prim;
int numar;
/* definesc primul element din lista */
prim = (struct s_coada *) malloc (sizeof(struct s_coada));
prim -> valoare = numar;
prim -> nr_aparitii = 1;
prim -> urmator = NULL;
clrscr();
printf ("Programul construieste si afiseaza o coada (lista) de numere,\n"
"lista se va termina cu CTRL-Z, ENTER.\nProgramul "
"va afisa numerele din lista si frecventa aparitiei lor.\n");
printf ("Introduceti numar:");
while ( scanf ("%d", &numar ) != EOF )
{
if (adauga_coada (prim , numar) == 0)
break;
printf ( "Introduceti numar:");
}
afisare_coada ( prim );
free ( prim );
}
________________________________________________________________________
/* Programul citeste cuvinte, de la tastatura, pana la introducerea
cuvantului vid (ENTER la inceputul unei linii, dupa care permite
afisarea cuvintelor ce incep cu o anumita litera (specificata)
Cuvintele citite sunt depuse intr-o lista pe doua niveluri:
- pe primul nivel este lista ce contine literele de inceput ale
cuvintelor introduse;
- pe cel de-al doilea nivel (legat la primul) se afla numai cvintele
ce incep cu litera corespunzatoare nivelului respectiv
*/
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define SIZE 20
#define STOP ""
struct s_listh
{
char word[SIZE];
struct s_listh *nexth;
};
struct s_listv
{
char c;
struct s_listh *nexto;
struct s_listv *nextv;
};
struct s_listv * insert (struct s_listv *prim, char cuv[])
{ /* functia insereaza un cuvant in lista (2) si/sau o litera in 1-a lista */
struct s_listv *listv, *prev, *newv;
struct s_listh *listh, *preh, *newh;
int gasit;
prev = NULL;
listv = prim;
gasit = listv->c == cuv[0];
while (!gasit && cuv[0] > listv->c && listv->nextv != NULL)
{
prev = listv;
listv = listv->nextv;
gasit = listv->c == cuv[0];
}
if (gasit)
{
/* daca s-a gasit litera in lista verticala */
listh = listv->nexto;
preh = NULL; /* se cauta pozitia cuvantului in lista orizontala */
while (strcmp(listh->word, cuv) < 0 && listh != NULL)
{
preh = listh;
listh = listh->nexth;
}
newh = (struct s_listh *) malloc(sizeof(struct s_listh));
newh->nexth = listh;
strcpy(newh->word,cuv);
if (preh!=NULL)
preh->nexth = newh;
else
listv->nexto = newh;
}
else /* se insereaza un nou element in lista pe verticala (1-ul nivel) */
{
newv = (struct s_listv *) malloc(sizeof(struct s_listv));
newv->c = cuv[0];
newv->nextv = listv;
if(prev!=NULL)
prev->nextv = newv;
else
prim = newv;
newh = (struct s_listh *)malloc(sizeof(struct s_listh));
newv->nexto = newh;
strcpy(newh->word,cuv);
newh->nexth = NULL;
}
return prim;
}
void afiseaza_cuvinte ( struct s_listv *primu, char carc )
{
struct s_listv *plist;
else
first = insert (first, word);
}
do
{
printf("Litera din alfabet pentru care vreti sa listati "
"cuvintele introduse: ");
car = getchar();
while (getchar() != '\n');
afiseaza_cuvinte(first,car);
printf("\n");
printf("\nMai doriti afisarea si altor cuvinte? (D/N):");
car = getchar();
while(getchar() != '\n');
} while (car == 'd' || car == 'D');
}
________________________________________________________________________
/* recursiv.cpp - exemplificarea recursivitatii */
/* programul apeleaza functia recursiva "apel_si_revenire"
care afiseaza nivelul apelului si la apelarea recursiva a functiei
si la revenirea din apelul recursiv, dupa apasarea tastei ENTER */
#include <stdio.h>
#include <conio.h>
void apel_si_revenire (int );
main ()
{
clrscr();
apel_si_revenire ( 1 );
}
void apel_si_revenire ( n )
int n;
{
int nr_apeluri = 3; /* numarul de apeluri recursive */
printf("Program de exemplificare a mecanismului functiilor recursive.\n");
printf("Apasa ENTER pentru apel recursiv, n=%d",n);
while(getchar() != '\n');
/* se tipareste nivelul apelului recursiv dupa ce se apasa tasta ENTER */
printf ("Nivel apel: %d.\n", n);
if ( n < nr_apeluri )
apel_si_revenire ( n + 1 );
/* se tipareste nivelul revenirii din apel dupa ce se apasa tasta ENTER */
printf("Apasa ENTER pentru revenire din apelul recursiv, n=%d",n);
while(getchar() != '\n');
printf ("Nivel revenire: %d.\n", n);
}
else
rezultat = fib ( n-1 ) + fib ( n-2 );
return ( rezultat );
}
void main ()
{
int
index;
printf("\nProgramul determina recursiv un numar din sirul lui Fibonacci.\n");
do
{
printf ("Pozitia pentru care se determina un numar din sirul "
"Fibonacci (max. 23)\nPoz=");
scanf ("%d", &index );
} while (index < 0 || index > 23);
printf ("Numarul al %d-lea din sir este: %d\n", index, fib(index));
}
________________________________________________________________________
/* Programul scrie un cuvant in oglinda (invers), utilizand o functie
recursiva */
#include <stdio.h>
void invers ( void )
{
const char punct = '.';
char c;
c = getchar ( );
if ( c != punct )
invers();
if ( c != punct )
putchar ( c );
}
void main ( )
{
printf("\n\nProgramul afiseaza invers un cuvant (o propozitie) ce se "
"termina cu punct.\nIntroduceti cuvantul:\n");
invers();
printf(".\n");
}
________________________________________________________________________
/* Programul calculeaza puterea intreaga a unui numar real,
folosind o functie recursiva */
#include <stdio.h>
double putere ( double x, int n )
{
double rezultat;
if ( n == 0 )
rezultat = 1;
else if ( n > 0 )
rezultat = x * putere ( x , n - 1 );
else
rezultat = putere ( x , n + 1 ) / x;
return ( rezultat );
}
void main ( void )
{
double numar;
int exponent;
printf("\n\nProgramul calculeaza puterea intreaga a unui numar real,\n");
printf("utilizand o functie recursiva.\n");
printf("Numar = ");
scanf("%lf", &numar);
printf("Putere = ");
scanf("%d", &exponent);
printf("(%.2lf)^(%d) = %.5le\n", numar, exponent, putere(numar, exponent));
}
________________________________________________________________________
/* Problema 'Turnurilor din Hanoi', rezolvata recursiv
*/
#include <stdio.h>
#include <conio.h>
enum pozitie { stanga , mijloc , dreapta};
int nr_linii_ecran = 0;
void tipareste_pozitie ( enum pozitie poz )
{
switch ( poz )
{
case 0 : printf ( "stanga" );/* se poate case stanga */
break;
case 1 : printf ( "mijloc" );
break;
case 2 : printf ( "dreapta" );
}
}
void deplasare( enum pozitie sursa , enum pozitie dest )
{
if ( ++ nr_linii_ecran % 23 == 0 )
{
printf("Apasati ENTER pentru a continua afisarea.");
getchar();
}
printf ( "muta un disc din " );
tipareste_pozitie ( sursa );
printf ( " in " );
tipareste_pozitie ( dest );
printf ( "\n" );
}
void muta ( int n, enum pozitie sursa, enum pozitie inter, enum pozitie dest )
{
if ( n > 0 )
{
muta ( n - 1 , sursa , dest , inter );
deplasare ( sursa , dest );
muta ( n - 1 , inter, sursa , dest );
}
}
void main ()
{
int i , nd;
clrscr();
printf("Problema Turnurilor din Hanoi:\n"
"se muta un turn format din \"n\" discuri de pe pozitia \"stanga\"\n"
"pe pozitia \"dreapta\", utilizand o pozitie intermediara "
"(\"mijloc\"):\n"
"- se muta numai cate 1 disc, la un moment dat si nu se poate pune\n"
"unul de diametru mai mare peste unul de diametru mai mic\n"
"(discurile sunt de diametre diferite si sunt dispuse unul peste "
"altul, initial,\n"
"in ordine descrescatoare a diametrelor- de jos in sus)\n");
printf ("Nr. de discuri :");
scanf ("%d", &nd);
while (getchar() != '\n');
printf ("Mutarile pt. deplasarea unui turn cu %d discuri sunt :\n", nd);
muta (nd , stanga , mijloc , dreapta);
printf("\n\n");
}
________________________________________________________________________
/*
programul afiseaza o valoare intreaga, pozitiva, in binar,
utilizand o functie recursvia pentru conversie
*/
#include <stdio.h>
#include <conio.h>
void binar ( long int k )
{
int r;
r = k % 2;
if ( k >= 2 )
binar ( k / 2 );
putchar ('0' + r);
}
void main (){
long int n;
printf("Programul converteste in binar un numar intreg pozitiv.\n");
printf("Numar de Convertit (stop=valoare nenumerica):");
while ( scanf("%li",&n) == 1 )
{
printf("Reprezentarea binara este: ");
binar ( n );
printf("\n\n");
printf("Numar de Convertit (stop=valoare nenumerica):");
}
}
________________________________________________________________________
/* Programul afiseaza cifrele unui numar n zecimal in ordine ineversa
utilizand o functie recursiva
*/
#include <stdio.h>
void afis_inv (long int n)
{
if (n < 0)
{
putchar ('-');
n = -n;
}
putchar (n % 10 + '0');
if (n / 10)
afis_inv (n / 10);
}
void main(void)
{
long int numar;
printf("Progr. afiseaza cifrele unui numar intreg in ordine inversa.\n");
printf ("Numar= ");
scanf ("%ld", &numar);
printf("Invers=");
afis_inv (numar);
printf ("\n\n");
}
________________________________________________________________________
/* Programul afiseaza o valoare intreaga, pozitiva, in binar si hexa,
utilizand, pentru conversie, functii recursive */
#include <stdio.h>
#include <conio.h>
int
n;
#define MAX 10
void qsort ( int v[ ] , int stanga, int dreapta )
{
int i, ultim;
void swap ( int v[ ], int i, int j ) ;
if ( stanga >= dreapta ) /* nu face nimic daca vectorul contine */
return ;
/* mai putin de doua elemente */
swap ( v, stanga, ( stanga + dreapta )/2) ; /* muta elementul de partitie */
ultim = stanga;
/* la v[ 0 ] */
for ( i = stanga + 1 ; i <= dreapta ; i++)
/* partitia */
if ( v[i] < v[stanga] )
swap (v, ++ultim, i );
swap ( v, stanga, ultim ); /* reface elementul de partitie */
qsort ( v, stanga, ultim-1 );
qsort ( v, stanga+1, dreapta ) ;
}
/* swap : interschimba v[i] si v[j] */
void swap ( int v[ ] , int i , int j )
{
int temp ;
temp = v[i];
v [i] = v[j];
v [j] = temp ;
}
void main (void)
{
int
vector[MAX];
int
i, n;
printf("\nProgr. ordoneaza un vector utilizand functia recursiva qsort.\n");
printf("Dimensiune vector: ");
scanf("%d",&n);
printf("Elementele vectorului:\n");
for (i = 0 ; i < n ; i++)
{
printf("v(%d)= ",i+1);
scanf("%d", &vector[i]);
}
qsort(vector, 0, n-1);
printf("\nVectorul ordonat este:\n");
for (i = 0 ; i < n ; i++)
printf("v(%d)=%d\n", i+1, vector[i]);
printf("\n\n");
}
________________________________________________________________________
/* Programul ordoneaza recusiv un vector apeland functia recursiva
max = abs(vector[i]);
/* dupa care se determina numarul de cifre pentru afisarea maximului */
nrcifre = 0;
while (max)
{
nrcifre++;
max = max /10;
}
qsort( vector, 0, n-1);
for ( i = 0 ; i < n ; i++ , nel++)
{
if (!(nel % 4))
printf("\n");
printf("v[%d]=%*d ", i+1, nrcifre+1, vector[i]);
}
printf("\n");
}
________________________________________________________________________
/* Programul afiseaza n invers, in zecimal utilizand o functie recursiva */
#include <stdio.h>
void printinv ( long int n )
{
if ( n < 0 )
{
putchar ('-');
n = -n;
}
putchar (n % 10 + '0');
if ( n / 10 )
printinv (n / 10);
}
void main (void)
{
long int numar;
printf("\nProgramul afiseaza invers un numar, folosind o functie recursiva.\n");
printf("Numar= ");
scanf("%ld", &numar);
printf("Invers=");
printinv(numar);
printf("\n");
}
________________________________________________________________________
/* constivr.cpp - programul construieste o coada de numere intregi, pe care
o afiseaza, utilizand functii recursive: adaug_coada, afisez_coada */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
struct s_coada
{
int
valoare;
struct s_coada *urmator;
};
int nr_val_linie=0; /* contor pentru nr. de valori afisate pe linie */
void adaug_coada (struct s_coada *primul, int val)
{
/*Functia returneaza un pointer la primul element din coada daca s-a putut
adauga un nou element, sau NULL daca nu s-a adaugat ("Memorie plina!") */
if (primul->urmator==NULL){
primul->urmator=(struct s_coada *)malloc(sizeof(struct s_coada));
if(!primul->urmator)
{printf("Memorie plina!!!\n");
exit(1);
}
primul=primul->urmator;
primul->valoare=val;
primul->urmator=NULL;
}
else
adaug_coada(primul->urmator, val);
}
void afisez_coada(struct s_coada *primul)
{
if (primul)
{
printf("%2d-> ", primul->valoare);
nr_val_linie++;
if (nr_val_linie%8==0)
printf("\n");
afisez_coada(primul->urmator);
}
}
void eliberare_spatiu (struct s_coada *ptrs){
struct s_coada *p=ptrs;
if(p){ ptrs=p;
p=p->urmator;
free(ptrs);
eliberare_spatiu(p);
}
}
void main()
{
struct s_coada *prim=NULL;
int numar;
clrscr();
printf("Prg. construieste si afiseaza o coada de nr. intregi, distincte.\n");
printf("Introducerea se termina cu EOF(CTRL-Z, ENTER.\n");
printf("Introduceti numar: ");
scanf("%d", &numar);
prim=(struct s_coada *)malloc(sizeof(struct s_coada));
if(!prim)
{printf("Memorie plina!!!\n");
exit(1);
}
prim->valoare=numar;
prim->urmator=NULL;
printf("Introduceti numar: ");
while(scanf("%d", &numar)!=EOF)
{adaug_coada(prim, numar);
printf("Introduceti numar: ");
}
afisez_coada(prim);
printf("NULL\n");
eliberare_spatiu(prim);
}
________________________________________________________________________
#include <stdio.h>
#include <conio.h>
#define NMAX 9
/* dimensiune maxima pentru tabla de sah +1 */
#define N 6 /* dimensiunea efectiva a tablei+ 1 */
#define NSQ 25
/* NSQ = N^2 */
int a[NMAX]={0, 1, 1, 2, 2,-1,-1,-2,-2};
int b[NMAX]={0, 2,-2, 1,-1, 2,-2, 1,-1};
int h[NMAX][NMAX];
void main(void)
{
void muta (int i, int x, int y, int *q);
int l, c, *q;
clrscr();
for (l=1 ; l < N ; l++)
for (c=1 ; c < N ; c++)
h[l][c] = 0;
h[1][1]=1;
muta(2, 1, 1, q);
if (*q)
{
for (l=1 ; l < N ; l++)
{
for ( c=1 ; c < N ; c++)
printf("%3d ",h[l][c]);
printf("\n");
}
}
else
printf("Nu exista solutie\n");
}
void muta (int i, int x, int y, int *q)
{
int u,v;
int *q1;
int k = 0; /* initializare selectie mutari */
do
{
k = k + 1;
/* selectie urmatorul candidat din lista de mutari */
u = x + a[k];
v = y + b[k];
*q1 = 0;
if (u>=1 && u<N && v>=1 && v<N && h[u][v]==0)
{
h[u][v] = i;
if ( i < NSQ )
{
muta(i+1, u, v, q1);
if (!(*q1))
h[u][v] = 0;
}
else
*q1 = 1;
}
}while(!*q1 && k<8);
*q = *q1;
}
________________________________________________________________________
/* Programul rezolva problema "turul calului", adica acoperirea unei table
de sah prin muatrea unui "cal", cu conditia ca fiecara casuta a tablei
de sah sa fie parcursa o singura data. Problema se rezolva prin metoda
"back tracking" */
#include <stdio.h>
#include <conio.h>
#define NMAX 9
/* dimensiune maxima pentru tabla de sah +1 */
#define N 6 /* dimensiunea efectiva a tablei+ 1 */
#define NSQ 25
/* NSQ = N^2 */
int a[NMAX]={0, 1, 1, 2, 2,-1,-1,-2,-2};
int b[NMAX]={0, 2,-2, 1,-1, 2,-2, 1,-1};
int h[NMAX][NMAX];
int nr_sol=0, nr_ramuri=0;
void main(void)
{
void muta (int i, int x, int y);
int l, c;
clrscr();
for (l=1 ; l < N ; l++)
for (c=1 ; c < N ; c++)
h[l][c] = 0;
h[1][1]=1;
muta(2, 1, 1);
printf("\nNumarul total de solutii: %d", nr_sol);
printf("\nNumarul total de incercari (ramuri arbore incercari): %d\n",
nr_ramuri);
}
void muta (int i, int x, int y)
{
void afiseaza_solutie(void);
int k, u, v;
for ( k = 1; k <= 8; k++) /* selectie mutarea urmatoare */
{
u = x + a[k];
v = y + b[k];
if (u>=1 && u<N && v>=1 && v<N && h[u][v]==0)
{
h[u][v] = i;
if ( i < NSQ )
muta(i+1, u, v);
else
afiseaza_solutie();
h[u][v] = 0;
}
else
nr_ramuri++; /* s-a ajuns intr-o "fundatura" */
}
}
void afiseaza_solutie(void)
{
int l, c;
nr_sol++;
for ( l = 1; l < N; l++)
{
for ( c = 1; c < N; c++)
printf("%3d", h[l][c]);
printf("\n");
}
printf("\n");
if (nr_sol %4 == 0)
getch();
}
________________________________________________________________________
/* Programul rezolva problema "turul calului", adica acoperirea unei table
de sah prin muatrea unui "cal", cu conditia ca fiecara casuta a tablei
de sah sa fie parcursa o singura data. Problema se rezolva prin metoda
"back tracking" */
#include <stdio.h>
#include <conio.h>
#define NMAX 9
/* dimensiune maxima pentru tabla de sah +1 */
#define N 6 /* dimensiunea efectiva a tablei+ 1 */
#define NSQ 25
/* NSQ = N^2 */
int a[NMAX]={0, 1, 1, 2, 2,-1,-1,-2,-2};
int b[NMAX]={0, 2,-2, 1,-1, 2,-2, 1,-1};
int h[NMAX][NMAX];
int nr_sol=0, nr_ramuri=0;
void main(void)
{
void muta (int i, int x, int y);
int l, c;
clrscr();
for (l=1 ; l < N ; l++)
for (c=1 ; c < N ; c++)
h[l][c] = 0;
h[1][1]=1;
muta(2, 1, 1);
printf("\n\nNumarul total de solutii: %d", nr_sol);
printf("\nNumarul total de incercari (ramuri arbore - incercari): %d\n",
nr_ramuri);
getch();
}
void muta (int i, int x, int y)
{
void afiseaza_solutie(void);
int k, u, v;
for ( k = 1; k <= 8; k++) /* selectie mutarea urmatoare */
{
u = x + a[k];
v = y + b[k];
if (u>=1 && u<N && v>=1 && v<N && h[u][v]==0)
{
h[u][v] = i;
if ( i < NSQ )
muta(i+1, u, v);
else
afiseaza_solutie();
h[u][v] = 0;
}
else
nr_ramuri++; /* s-a ajuns intr-o "fundatura" */
}
}
void afiseaza_solutie(void)
{
int l, c, xe, ye;
xe = nr_sol % 4;
ye = (nr_sol / 4) % 4;
for ( l = 1; l < N; l++)
{
for ( c = 1; c < N; c++)
{
gotoxy ( xe*20+1 + (c-1)*3, ye*6 + l);
printf("%2d", h[l][c]);
}
}
nr_sol++;
if (nr_sol % 16 == 0)
{
printf("\nApasati ENTER pentru a continua afisarea solutiilor.");
getch();
}
}
________________________________________________________________________
/* Programul ordoneaza valorile de pe diagonala unei matrici,
utilizand un algoritm backtracking */
#include <stdio.h>
#define NR_MAX 20
int a[NR_MAX][NR_MAX], nr_sol=0;
int nl , nc , l , c;
int a[NR_MAX][NR_MAX];
int nl , nc , l , c , q;
void main (void)
{
int incearca ( int i, int *q );
printf("\nProgramul ordoneaza valorile de pe diagonala unei matrici,\n"
"utilizand metoda backtracking, furnizand doar prima solutie.\n");
printf("Numarul de linii/coloane ale matricii:");
scanf("%d%d",&nl,&nc);
for ( l = 0 ; l < nl ; l++ )
for ( c = 0 ; c < nc ; c++ )
{
printf("a[%d,%d]=",l+1,c+1);
scanf("%d", &a[l][c]);
};
printf("\nMatricea initiala este:\n");
for (l = 0 ; l < nl ; l++ )
{
for ( c = 0 ; c < nc ; c++ )
printf("%4d", a[l][c]);
printf("\n");
};
printf("\nS-a citit matricea, se cauta o solutie. Pentru afisarea ei "
"tastati ENTER.\n");
getch();
/* daca functia "incearca" returnaeaza o solutie se va tipari aceasta */
if ( incearca(0, &q) )
for (l = 0 ; l < nl ; l++ )
{
for ( c = 0 ; c < nc ; c++ )
printf("%4d", a[l][c]);
printf("\n");
}
else
printf("Nu exista solutie!!!\n");
printf("Pentru terminare program tastati ENTER.\n");
getch();
}
int incearca ( int i , int *q )
{
/* functia furnizeaza o solutiile posibila, utilizand backtracking */
int lin , col , l , c ;
int
aux, q1;
lin = i; col = i;
do
{
q1 = 0;
if (( i > 0 && a[lin][col] >= a[i-1][i-1] ) || (i == 0))
{/* se cauta urmatoarea valoare mai mare in submatricea ramasa
[(i,i);(nl,nc)] */
/* pentru care se vor interschimba liniile respective */
for ( c = 0 ; c < nc ; c++ )
{
aux = a[i][c];
a[i][c] = a[lin][c];
a[lin][c] = aux;
};
/* si se interschimba si coloanele respective */
for ( l= 0 ; l < nl ; l++ )
{
aux = a[l][i];
a[l][i] = a[l][col];
a[l][col] = aux;
};
if (i < nl-1)
{
incearca ( i+1 , &q1 );
if (!q1)
{
/* se anuleaza ultima alegere, prin refacerea
matricei interschimband, la loc, ultima
interschimbare de linii si de coloane
*/
for ( c= 0 ; c < nc ; c++ )
{
aux = a[i][c];
a[i][c] = a[lin][c];
a[lin][c] = aux;
};
for ( l = 0 ; l < nl ; l++ )
{
aux = a[l][i];
a[l][i] = a[l][col];
a[l][col] = aux;
};
};
}
else
q1 = 1;
};
if (col == nc-1 )
{
col = i;
lin++;
}
else
col++;
} while (!q && lin < nl-1);
*q = q1;
return (q1);
}
________________________________________________________________________
/* Programul determina o solutie pentru pozitiile a 8 regine amplasate
pe tabla de sah astfel incat ele sa nu se "atace" reciproc;
pe fiecare linie si pe fiecare coloana a matricii va fi doar cate o
regina.
*/
#include <stdio.h>
#include <conio.h>
int x[9]; /* pozitia reginei in linia curenta, i */
int a[9]; /* nu este regina pe coloana curenta, j */
int b[15]; /* nu este acoperita diagonala dreapta */
int c[15]; /* nu este acoperita diagonala stanga */
int i, q;
void incearca (int i, int *q)
{
int j=0, *q1;
do
{
j++; /* selectie urmatoarea pozitie din linie */
if (a[j] && b[i-j+7] && c[i+j])
{
x[i]=j; a[j]=0; b[i-j+7]=0;
c[i+j]=0; *q1=0; /* pune regina */
if ( i < 8 )
{
incearca(i+1,q1);
if ( !(*q1) )
{ /* scoate regina */
a[j]=1;
b[i-j+7]=1;
c[i+j]=1;
}
}
else
*q1=1;
}
{
clrscr();
printf("Programul determina solutia incarcarii unui rucsac cu obiecte,\n"
"dintr-un numar dat de obiecte, astfel incat castigul sa fie maxim.\n"
"Rucsacul are o anumita capacitate (in Kg), si de asemenea, fiecare\n"
"obiect are o greutate proprie, dar fiecare obiect are asociata si o\n"
"anumita pondere (importanta sau castig). Alegerea obiectelor se face\n"
"prin includerea completa (adica a obiectelor intregi) maximizand\n"
"\"castigul\" total.\n");
printf("\nNumarul de obiecte de introdus in rucsac:");
scanf("%d", &n);
printf("Capacitatea rucsacului (Kg) : ");
scanf("%d", &greutate);
for ( i = 1; i <= n; i++)
{
printf("\nGreutatea obiectului [%d] = ",i);
scanf("%d", &g[i]);
printf("Importanta obiectului [%d] = ", i);
scanf("%d", &c[i]);
}
for ( i = 1; i <= n; i++)
sts[i] = 0;
cs = 0;
init( st, 1 );
k = 1;
while ( k > 0 )
{
do {
succesor( st, k, &as);
if (as)
valid(st, k, &ev);
} while (as && (!as || !ev));
if (as)
if ( solutie(k) )
{
ccalc = 0;
for ( i = 1; i <= n; i++ )
ccalc += c[i]*st[i];
if (ccalc > cs )
{
for ( i = 1; i <= n; i++)
sts[i] = st[i];
cs = ccalc;
}
}
else
{
k++;
init( st, k);
}
else
k--;
}
printf("\nSolutia problemei este (numai obiectele luate in rucsac):\n");
printf("Obiectele puse in rucsac : ");
for ( i = 1; i <= n; i++ )
if (sts[i])
printf("%d; ", i);
printf("\n");
printf("\nCastig : %d\n", cs);
getch();
}
________________________________________________________________________
#include <stdio.h>
#include <conio.h>
#define NMAX 9
/* dimensiune maxima pentru tabla de sah +1 */
#define N 6 /* dimensiunea efectiva a tablei+ 1 */
#define NSQ 25
/* NSQ = N^2 */
int a[NMAX]={0, 1, 1, 2, 2,-1,-1,-2,-2};
int b[NMAX]={0, 2,-2, 1,-1, 2,-2, 1,-1};
int h[NMAX][NMAX];
void main(void)
{
void muta (int i, int x, int y, int *q);
int l, c, *q;
clrscr();
for (l=1 ; l < N ; l++)
for (c=1 ; c < N ; c++)
h[l][c] = 0;
h[1][1]=1;
muta(2, 1, 1, q);
if (*q)
{
for (l=1 ; l < N ; l++)
{
for ( c=1 ; c < N ; c++)
printf("%3d ",h[l][c]);
printf("\n");
}
}
else
printf("Nu exista solutie\n");
}
void muta (int i, int x, int y, int *q)
{
int u,v;
int *q1;
int k = 0; /* initializare selectie mutari */
do
{
k = k + 1;
/* selectie urmatorul candidat din lista de mutari */
u = x + a[k];
v = y + b[k];
*q1 = 0;
if (u>=1 && u<N && v>=1 && v<N && h[u][v]==0)
{
h[u][v] = i;
if ( i < NSQ )
{
muta(i+1, u, v, q1);
if (!(*q1))
h[u][v] = 0;
}
else
*q1 = 1;
}
}while(!*q1 && k<8);
*q = *q1;
}
________________________________________________________________________
/* Program ordonare sir , utilizand metoda de selectie directa
*/
#include <stdio.h>
#include <conio.h>
void ordonare_sel_dir(double sir[], int nrelem)
{
int i,j;
double aux;
for(i=0;i<nrelem-1;++i)
for(j=i+1;j<nrelem;++j)
if(sir[i]>sir[j])
{
aux=sir[i];
sir[i]=sir[j];
sir[j]=aux;
}
}
main()
{
double sir[1000], val;
int ne,i;
clrscr();
printf("Program ordonare sir, utilizand metoda de selectie directa.\n");
printf("\nNumarul de elemente din sirul de ordonat: ");
scanf("%d",&ne);
printf("\nIntroduceti cele %d elemente ale sirului.\n\n", ne);
for (i=0;i<ne;++i)
{
printf("sir(%d)=",i+1);
scanf("%lf",&val);
sir[i]=val;
}
ordonare_sel_dir(sir,ne);
printf("\nSirul ordonat este:\n\n");
for(i=0;i<ne;++i)
printf("sir(%2d)=%7.2lf ",i,sir[i]);
}
________________________________________________________________________
/* Programul ordoneaza un sir de valori utilizand metoda binara,
folosind o functie sort_ins_binara.
*/
#include<stdio.h>
#include <conio.h>
/*
functia de sortare prin inserare binara
*/
void sort_ins_binara ( double a[], int n )
{
double x;
int i, j, s, d, m;
for ( i = 1 ; i < n ; ++i )
{
x = a[i]; s = 0; d = i - 1;
while ( s <= d )
{
m = ( s + d )/2;
if ( x < a[m] )
d = m - 1;
else
s = m + 1;
}
for ( j = i-1 ; j >= s ; --j )
a[j+1] = a[j];
a[s] = x;
}
}
main()
{
double sir[100];
int ne,i;
clrscr();
printf("Programul ordoneaza un sir de valori utilizand metoda binara.\n");
printf("Numar elemente:");
scanf("%d",&ne);
for(i=0;i<ne;i++)
{
printf("sir(%d)=",i+1);
scanf("%lf",&sir[i]);
}
printf("\nSirul ordonat este: \n");
sort_ins_binara(sir , ne);
for (i=0;i<ne;i++)
{
printf(" sir (%2d) = %lf \n" , i+1 , sir[i]);
}
}
________________________________________________________________________
/* Programul ordoneaza un sir de valori prin selectie directa,
utilizand o functie sort_ins_direct
*/
#include <stdio.h>
#include <conio.h>
/*
functia de sortare prin inserare directa
*/
void sort_ins_direct ( double a[], int n )
{
double x;
int i,j;
for ( i = 1 ; i < n ; ++i )
{
x = a[i];
j = i - 1;
while ( x < a[j] && j >= 0 )
{
a[j+1] = a[j];
j--;
}
a[j+1] = x;
}
}
main()
{
double sir[100];
int ne,i;
clrscr();
printf("Programul ordoneaza un sir de valori prin selectie directa.\n");
printf("Numar elemente:");
scanf("%d",&ne);
for(i=0;i<ne;i++)
{
printf("sir(%d)=",i+1);
scanf("%lf",& sir[i]);
}
sort_ins_direct (sir,ne);
printf("\n Sirul ordonat:\n");
for(i=0;i<ne;i++)
{
printf(" sir(%d)=%5.2lf ",i+1,sir[i]);
if ( (i+1) %5 == 0 )
printf("\n");
}
printf("\n");
}
________________________________________________________________________
/* Programul ordoneaza un sir de valori utilizand algoritmul "quicksort"
si foloseste o functie 'quicksort' pentru ordonarea sirului
*/
#include<stdio.h>
#include <conio.h>
int a[100];
main()
{
void quiksort ( int s, int d );
int ne,i;
clrscr();
printf("Programul ordoneaza un sir de valori utilizand algoritmul \"quicksort\".\n");
printf("\nNumar elemente:");
scanf("%d",&ne);
for(i=0;i<ne;i++)
{
printf("sir(%d)=",i+1);
scanf("%d",&a[i]);
}
printf("\nSirul ordonat este:\n\n");
quiksort (0 , ne-1);
for (i=0;i<ne;i++)
{
printf(" sir (%2d) = %d \n" , i+1 , a[i]);
}
}
/*
functia de sortare QUICKSORT
*/
void quiksort ( int s, int d )
{
int x,w;
int i=s , j=d , p;
p = ( s + d )/2;
x = a[ p ];
do
{
while ( a[i] < x && i <= d )
i = i + 1;
while ( x < a[j] && j >= s )
j = j - 1;
if ( i <= j )
{
w = a[i]; a[i] = a[j]; a[j] = w;
i = i + 1; j = j - 1;
}
}
while ( i <= j );
if ( s < j ) quiksort(s,j);
if ( i < d ) quiksort(i,d);
}
________________________________________________________________________
/* Programul ordoneaza un sir de valori prin selectie directa,
utilizand o functie de sortare
*/
#include<stdio.h>
#include <conio.h>
void sort_sel_direct ( double a[], int n )
/*
*/
#include<stdio.h>
void ordonare_sel_dir(double sir[], int nrelem)
{
int i,j;
double aux;
for(i=0;i<nrelem-1;++i)
for(j=i+1;j<nrelem;++j)
if(sir[i]>sir[j])
{
aux=sir[i];
sir[i]=sir[j];
sir[j]=aux;
}
}
main()
{
double sir[1000];
int ne,i;
printf("Numarul de elemente: ");
scanf("%d",&ne);
for (i=0;i<ne;++i)
{
printf(" sir(%d)=",i+1);
scanf("%lf",&sir[i]);
}
ordonare_sel_dir(sir,ne);
for(i=0;i<ne;++i)
printf(" sir(%d)=%lf ",i,sir[i]);
}
________________________________________________________________________
/* Programul ordoneaza un sir de valori cu algoritmul "SHAKERSORT".
utilizand o functie pentru ordonare
*/
#include<stdio.h>
#include <conio.h>
/*
functia sorteaza vectorul utilizand algoritmul "SHAKERSORT"
*/
void sort_shakersort( double a[], int n )
{
double x;
int j , s = 1, d = n-1, k = n-1;
do
{