Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Problema 1.(Tablou 50 elemente)
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 52
- int a[lmax],na,b[lmax],nb,i,j;
- int maxim(int a, int b)
- {
- if(a>b)
- return a;
- else
- return b;
- }
- int modul(int a)
- {
- if(a>0)
- return a;
- else
- return -a;
- }
- void read()
- {
- FILE *f=fopen("fisier.in","r");
- fscanf(f,"%d",&na);
- for(i=1;i<=na;i++)
- fscanf(f,"%d",&a[i]);
- }
- void show(int a[],int na)
- {
- for(i=1;i<=na;i++)
- printf("%d ",a[i]);
- printf("\n");
- }
- void adauga_Fara_Tablou()
- {
- for(i=1;i<=na;i++)
- {
- if(a[i]-a[i+1] < 10)
- {
- na++;
- for(j=na;j>=i+2;j--)
- a[j]=a[j-1];
- a[i+1]=maxim( modul(a[i]), modul(a[i+1]));
- i++;
- }
- }
- }
- void adauga_Cu_Tablou()
- {
- for(i=1;i<=na;i++)
- {
- b[++nb]=a[i];
- if(a[i]-a[i+1] < 10)
- {
- nb++;
- b[nb]=maxim( modul(a[i]), modul(a[i+1]));
- }
- }
- }
- int main()
- {
- read();
- show(a,na);
- adauga_Cu_Tablou();
- show(b,nb);
- return 0;
- }
- // 2. Problema cu multimile
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 52
- int a[lmax],b[lmax],na,nb,i,j;
- int intersectie[lmax], reuniune[2*lmax], ni, nr;
- int contine(int a[],int na,int x)
- {
- int i;
- for(i=1;i<=na;i++)
- if(a[i]==x)
- return 1;
- return 0;
- }
- void read()
- {
- FILE *f=fopen("fisier.in","r");
- //Citirea primei multimi
- fscanf(f,"%d",&na);
- for(i=1;i<=na;i++)
- fscanf(f,"%d",&a[i]);
- //Citirea celei de-a doua multimi
- fscanf(f,"%d",&nb);
- for(i=1;i<=nb;i++)
- fscanf(f,"%d",&b[i]);
- }
- void show(int a[], int n)
- {
- for(i=1;i<=n;i++)
- printf("%d ",a[i]);
- printf("\n");
- }
- void solve_Intersection()
- {
- int gasit=0;
- for(i=1;i<=na;i++)
- {
- gasit=0;
- for(j=1;j<=nb;j++)
- if(b[j]==a[i])
- {gasit=1;break;}
- if(gasit)
- intersectie[++ni]=a[i];
- }
- }
- void solve_Reunion()
- {
- for(i=1;i<=na;i++)
- if(!contine(reuniune,nr,a[i]))
- reuniune[++nr]=a[i];
- for(i=1;i<=nb;i++)
- if(!contine(reuniune,nr,b[i]))
- reuniune[++nr]=b[i];
- }
- void solve_CartesianProduct()
- {
- for(i=1;i<=na;i++)
- for(j=1;j<=nb;j++)
- printf("%d %d\n",a[i],b[j]);
- }
- int main()
- {
- read();
- solve_Intersection();
- show(intersectie,ni);
- solve_Reunion();
- show(reuniune,nr);
- solve_CartesianProduct();
- return 0;
- }
- // 3. Problema cu matricile
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 52
- int a[lmax][lmax],b[lmax][lmax],na,nb,ma,mb;
- int c[lmax][lmax],nc,mc;
- void show(int a[lmax][lmax], int na, int ma)
- {
- int i,j;
- for(i=1;i<=na;i++)
- {
- for(j=1;j<=ma;j++)
- printf("%d ",a[i][j]);
- printf("\n");
- }
- printf("\n");
- }
- void clear(int a[lmax][lmax],int na,int ma)
- {
- int i,j;
- for(i=1;i<=na;i++)
- for(j=1;j<=ma;j++)
- a[i][j]=0;
- }
- void read_matrice( int a[lmax][lmax], int na, int ma )
- {
- int i,j;
- for(i=1;i<=na;i++)
- for(j=1;j<=ma;j++)
- {printf("v[%d][%d]= ",i,j);scanf("%d",&a[i][j]);};
- }
- void read_matrice_fisier (FILE *f,int a[lmax][lmax], int na, int ma )
- {
- int i,j;
- for(i=1;i<=na;i++)
- for(j=1;j<=ma;j++)
- fscanf(f,"%d",&a[i][j]);
- }
- void suma_matrici( int a[lmax][lmax], int b[lmax][lmax], int nn, int mm )
- {
- int i,j;
- nc=nn;
- mc=mm;
- clear(c,nc,mc);
- for(i=1;i<=nc;i++)
- for(j=1;j<=mc;j++)
- c[i][j]=a[i][j]+b[i][j];
- }
- void produs_matrici(int a[lmax][lmax], int na, int ma, int b[lmax][lmax], int nb, int mb )
- {
- int i,j,k;
- nc=na;
- mc=mb;
- if(ma==nb)
- {
- for(i=1;i<=na;i++)
- for(j=1;j<=mb;j++)
- for(k=1;k<=ma;k++)
- c[i][j]+=a[i][k]*b[k][j];
- }
- }
- void show_helpMenu()
- {
- printf("**************************\n");
- printf("R: Read matrix\n");
- printf("D: Display matrix\n");
- printf("S: Sum between matrices\n");
- printf("P: Product between matrices\n");
- printf("**************************\n\n");
- }
- void handleInput(char cr)
- {
- int i;
- char cc=NULL;
- switch(cr)
- {
- case 'R':
- printf("Citeste matricea a sau b?");
- while( (int)cc == 10 || cc==NULL)scanf("%c",&cc);
- if(cc=='a' || cc=='A')
- {
- printf("Dimensiunile matricei: (n si m )");
- scanf("%d %d",&na,&ma);
- read_matrice(a,na,ma);
- }
- else
- if(cc=='b' || cc=='B')
- {
- printf("Dimensiunile matricei: (n si m)");
- scanf("%d %d",&nb,&mb);
- read_matrice(b,nb,mb);
- }
- break;
- case 'D':
- printf("Afiseaza matricea a sau b?");
- while( (int)cc == 10 || cc==NULL)scanf("%c",&cc);
- if(cc=='a' || cc=='A')
- {
- show(a,na,ma);
- }
- else
- if(cc=='b' || cc=='B')
- {
- show(b,nb,mb);
- }
- break;
- case 'S':
- if(na==nb && ma==mb)
- {
- printf("Suma celor doua matrici: \n");
- suma_matrici(a,b,na,ma);
- show(c,nc,mc);
- }
- else
- {
- printf("Operatia nu se poate efectua");
- }
- break;
- case 'P':
- if(ma==nb)
- {
- printf("Produsul celor doua matrici:\n");
- produs_matrici(a,na,ma,b,nb,mb);
- show(c,nc,mc);
- }
- break;
- default:
- break;
- }
- }
- void game_loop()
- {
- char c;
- show_helpMenu();
- while(1)
- {
- if( (int)c != 10 )
- {
- printf("Introduceti comanda :\n");
- }
- scanf("%c",&c);
- if(c=='X')
- break;
- else
- handleInput(c);
- }
- }
- int main()
- {
- game_loop();
- return 0;
- }
- //4 . (Problema cu matrici transpuse)
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 5
- int a[lmax][lmax],b[lmax*4][lmax*4],n;
- void read()
- {
- int i,j;
- printf("n= ");scanf("%d",&n);
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- {
- printf("a[%d][%d]= ",i,j);
- scanf("%d",&a[i][j]);
- }
- }
- void solve()
- {
- int i,j;
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- {
- b[i][j]=b[n+i][n+j]=a[j][i];
- b[n+i][j]=b[i][n+j]=a[i][j];
- }
- }
- void show()
- {
- int i,j;
- for(i=1;i<=2*n;i++)
- {
- for(j=1;j<=2*n;j++)
- printf("%d ",b[i][j]);
- printf("\n");
- }
- }
- int main()
- {
- read();
- solve();
- show();
- return 0;
- }
- // 5.
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 5
- int a[lmax][lmax],n,maximum,minimum,suma,prod=1;
- int maxim(int a,int b)
- {
- if(a>b)
- return a;
- else
- return b;
- }
- void schimb(int *a, int *b)
- {
- int *temp=*a;
- *a=*b;
- *b=temp;
- }
- void read()
- {
- int i,j;
- FILE *f=fopen("fisier.in","r");
- //printf("n= ");
- fscanf(f,"%d",&n);
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- {
- // printf("a[%d][%d]= ",i,j);
- fscanf(f,"%d",&a[i][j]);
- }
- }
- void schimb_regiuni(int r1,int r2)
- {
- int i,j;
- if( (r1==1 && r2==3) || (r1==3 && r2==1) )
- {
- for(i=1;i<=n/2;i++)
- for(j=i+1;j<=n-i;j++)
- schimb(&a[i][j],&a[n-i+1][j]);
- }
- else
- if( (r1==2 && r2==4) || (r1==4 && r2==2) )
- {
- for(i=2;i<=n-1;i++)
- for(j=1;(i+j)<n+1;j++)
- schimb(&a[i][j],&a[i][n-j+1]);
- }
- }
- void solve_A()
- {
- int i,j;
- maximum=minimum=a[1][1];
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if( (i>j) && (i+j)>n+1 ) // regiunea 1
- {
- if(a[i][j]>maximum)
- maximum=a[i][j];
- }
- else
- if( (i>j) && (i+j)<n+1 ) //regiunea 2
- {
- if(a[i][j]<minimum)
- minimum=a[i][j];
- }
- else
- if( (i<j) && (i+j)<n+1 ) //regiunea 3
- {
- suma+=a[i][j];
- }
- else
- if ( (i<j) && (i+j)>n+1 )
- {
- prod*=a[i][j];
- }
- printf("Maximul din regiunea 1 : %d\n",maximum);
- printf("Minimul din regiunea 2 : %d\n",minimum);
- printf("Suma elementelor din regiunea 3: %d\n",suma);
- printf("Produsul elementelor din regiunea 4 : %d\n\n",prod);
- }
- void show()
- {
- int i,j;
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=n;j++)
- printf("%d ",a[i][j]);
- printf("\n");
- }
- }
- void solve_B()
- {
- schimb_regiuni(1,3);
- printf("\nDupa schimbarea regiunilor 1 si 3:\n");
- show();
- schimb_regiuni(1,3);//o aducem la forma initiala
- }
- void solve_C()
- {
- schimb_regiuni(2,4);
- printf("\nDupa schimbarea regiunilor 2 si 4:\n");
- show();
- schimb_regiuni(2,4);//o aducem la forma initiala
- }
- void solve_D()
- {
- schimb_regiuni(2,4);
- schimb_regiuni(1,3);
- printf("\nDupa schimbarea regiunilor 1 si 3 , 2 si 4\n");
- show();
- }
- int main()
- {
- read();
- show();
- solve_A();
- solve_B();
- solve_C();
- solve_D();
- return 0;
- }
- // 6. Problema cu sortarea prin insertie
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 50
- int a[lmax],n,na;
- void insereaza(int a[],int *na,int x)
- {
- int poz=0,i=1,j;
- for(i=*na;i>=1;i--)
- if(x>a[i])
- {
- (*na)+=1;
- for(j=*na;j>=i+2;j--)
- a[j]=a[j-1];
- a[i+1]=x;
- break;
- }
- if(i==0)
- {
- (*na)+=1;
- a[*na]=x;
- }
- }
- void show(int a[],int na)
- {
- int i;
- for(i=1;i<=na;i++)
- printf("%d ",a[i]);
- printf("\n");
- }
- void read()
- {
- int x,i;
- scanf("%d",&n);
- for(i=1;i<=n;i++)
- {
- scanf("%d",&x);
- insereaza(a,&na,x);
- show(a,na);
- }
- }
- int main()
- {
- read();
- return 0;
- }
- // Problema 7 ( cu matrice, cifrele binare )
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 50
- int a[lmax][lmax],n,m;
- int putere(int x, int n)
- {
- if(n==1)
- return x;
- if(n==0)
- return 1;
- else
- if(n%2==1)
- {
- int rez= putere(x,n/2);
- return rez*rez+x;
- }
- else
- {
- int rez=putere(x,n/2);
- return rez*rez;
- }
- }
- void read()
- {
- int x,i,j;
- scanf("%d %d",&n,&m);
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- scanf("%d",&a[i][j]);
- }
- void solve()
- {
- int i,j,sum;
- for(j=1;j<=m;j++)
- {
- sum=0;
- for(i=n;i>=1;i--)
- if(a[i][j]==1)
- sum+=putere(2,n-i);
- printf("%d ",sum);
- }
- }
- int main()
- {
- read();
- solve();
- return 0;
- }
- // Problema 9
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 50
- float a[lmax];
- int n;
- void read()
- {
- int x,i;
- FILE *f=fopen("fisier.in","r");
- fscanf(f,"%d",&n);
- for(i=1;i<=n;i++)
- fscanf(f,"%f",&a[i]);
- }
- void sterge(int a[],int *n,int poz)
- {
- int i;
- for(i=poz;i<*n;i++)
- a[i]=a[i+1];
- (*n)-=1;
- }
- void show()
- {
- int i;
- for(i=1;i<=n;i++)
- printf("%f ",a[i]);
- printf("\n");
- }
- void solve()
- {
- int i,j;
- printf("Vectorul initial:");show();
- for(i=1;i<n;i++)
- for(j=i+1;j<=n;j++)
- if(a[i]==a[j])
- {
- sterge(a,&n,j);
- sterge(a,&n,i);
- j=n+1;
- i=0;
- }
- printf("Vectorul final : ");
- if(n==0)
- printf(" este nul.");
- else
- show();
- }
- int main()
- {
- read();
- solve();
- return 0;
- }
- // Problema 10
- #include <stdio.h>
- #include <stdlib.h>
- #define lmax 50
- int a[lmax];
- int n;
- void schimb(int *a,int *b)
- {
- int *temp=*a;
- *a=*b;
- *b=*temp;
- }
- void read()
- {
- int x,i;
- FILE *f=fopen("fisier.in","r");
- fscanf(f,"%d",&n);
- for(i=1;i<=n;i++)
- fscanf(f,"%d",&a[i]);
- }
- int suma_Cifre(int nr)
- {
- int sum=0;
- while(nr)
- {
- sum+=nr%10;
- nr/=10;
- }
- return sum;
- }
- void show()
- {
- int i;
- for(i=1;i<=n;i++)
- printf("%d ",a[i]);
- printf("\n");
- }
- void solve()
- {
- int i,j,aux;
- for(i=2;i<=n;i++)
- for(j=i;j>=2;j--)
- if(suma_Cifre(a[j])>suma_Cifre(a[j-1]))
- {
- aux=a[j];
- a[j]=a[j-1];
- a[j-1]=aux;
- }
- }
- int main()
- {
- read();
- show();
- solve();
- show();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement