Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- FILE *fb,*f,*f1,*c,*fn,*fm;
- int i,j,n,v[101],m,k,ok;
- void matrice(int n,int m);
- void secventa(int n);
- void sub_numar(int n);
- void paritate(int n);
- int main()
- {
- int caz;
- printf("Apasati 1 pentru a permuta coloanele unei matrici\n");
- printf("Apasati 2 pentru a afisa numarul secvente din fisier au lungimea k si valori mai mici sau egale cu t\n");
- printf("Apasati 3 pentru a afisa sub-numerele care apar de mai multe ori\n");
- printf("Apasati 4 pentru a afisa cea mai lunga secventa de numere cu paritati diferite din fisier\n");
- scanf("%d",&caz);
- switch(caz)
- {
- case '1' :
- matrice(n,m);break;
- case '2' :
- secventa(n);break;
- case '3' :
- sub_numar(n);break;
- case '4' :
- paritate(n);break;
- }
- return 0;
- }
- void sub_numar(int n)
- {
- fn=fopen("in.txt","r");
- fm=fopen("out.txt","w");
- int maxi=0;
- for(i=10;i<99;i++)
- v[i]=0;//initializarea vectorului de frecventa cu 0
- while(!feof(fn))
- {
- fscanf(fn,"%d",&n);
- while(n>10)
- {
- v[n%100]++;
- //cresterea frecventei oricarui numar format din 2 cifre extras din numarul n
- n/=10;
- }
- }
- for(i=10;i<99;i++)
- if(v[i]>maxi)
- maxi=v[i];
- //aflarea frecventei maxime a unui subnumar
- for(i=0;i<99;i++)
- if(v[i]==maxi)
- fprintf(fm,"%d ",i);
- //afisarea subnumerelor cu frecventa maxima
- }
- void paritate(int n)
- {
- int lc=0,lmax=0;
- //se deschid fisierele
- f=fopen("in.txt","r");
- f1=fopen("out.txt","w");
- fscanf(f,"%d",&n);//se citeste numarul de elemente ale fisierului in.txt
- for(i=0;i<n;i++)
- fscanf(f,"%d",&v[i]);//se citesc elementele din fisierul in.txt
- lc=0;
- lmax=0;
- for(i=0;i<n-1;i++)
- {
- if(v[i]%2!=v[i+1]%2)//se verifica daca paritatile a 2 numere consecutive difera intre ele
- lc++;
- else
- lc=0;
- if(lc>lmax)//se afla lungimea maxima a unei secvente care indeplineste conditia precizata
- lmax=lc;
- }
- lc=0;
- for(i=0;i<n-1;i++)
- {
- if(v[i]%2!=v[i+1]%2)
- lc++;
- else
- lc=0;
- if(lc==lmax)//se verifica daca secventa a atins lungimea maxima iar in caz afirmativ este afisata in out.txt
- {
- for(j=i-lmax+1;j<=i+1;j++)
- fprintf(f1,"%d ",v[j]);
- fprintf(f1,"\n");
- }
- }
- fclose(f);
- fclose(f1);
- }
- void secventa(int n)
- {
- int v[20],nr=0,t;
- c=fopen("in.txt","r");
- fscanf(c,"%d",&t); //am citit t , k , n din fisier
- fscanf(c,"%d",&k);
- fscanf(c,"%d",&n);
- for(i=0;i<n;i++) //am citit sirul de elemente din fisier de lungimea n
- fscanf(c,"%d",&v[i]);
- for(i=0;i<=n-k;i++)
- {ok=0; //am folosit 2 for-uri pentru a lua secvente de lungimea k
- for(j=i;j<i+k;j++)
- { if(v[j]<=t)
- ok++; //am luat un contor ok pentru a vedeea cate secvente de lungimea k au val mai mici ca t
- if(ok==k)
- nr++;
- }
- }
- fclose(c);
- c=fopen("out.txt","w");
- fprintf(c,"Numarul de secvente din sir care au lungimea %d si sunt formate din valori mai mici sau egale cu %d: %d ",k,t,nr);
- //am afisat numarul de secvente
- fclose (c);
- }
- void matrice(int n,int m)
- {
- int a[50][50],aux,z;
- fb = fopen("in.txt","r");
- fscanf(fb,"%d",&n);
- fscanf(fb,"%d",&m);
- fscanf(fb,"%d",&k);
- for (i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- fscanf(fb,"%d",&a[i][j]); //Citeste matricea din fisier
- for(z=1;z<=k;z++)
- {for(i=1;i<=n;i++)
- for(j=1;j<m;j++)
- {
- aux=a[i][j];
- a[i][j]=a[i][j+1];
- a[i][j+1]=aux; //Permuta de k ori coloanele matriciei
- }
- }
- fclose(fb);
- fb = fopen("out.txt","w");
- for (i=1;i<=n;i++)
- {
- for(j=1;j<=m;j++)
- fprintf(fb,"%4d ",a[i][j]);
- fprintf(fb,"\n"); //Afisarea matricei permutate in fisierul Output
- }
- fclose(fb);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement