C: Fisiere - aplicatii rezolvate


1) Să se realizeze un program care citeşte folosind elemetele până acum introduse, caracter cu caracter de la tastatură până la întâlnirea caracterului ‘$’ şi le trece într-un fişier al cărui nume se trece de la tastatură sau se specifică în linia parametrilor de comandă. (scriere in fisier) (rezolvare...)

2) Scrierea intr-un fisier (rezolvare...)

3) Să se scrie un program care să citească dintr-un fisier orice caracter ASCII şi să afişeze pe ecran conţinutul acestuia (rezolvare...)

4) Citire dintr-un fisier a unui sir de caractere cu functia fread/ fgets (rezolvare...)

5) Să se realizeze un program care copiază conţinutul unui fişier de pe disc într-altul al cărui nume este specificat în program (rezolvare...)

6) Indicând un număr de octet, să se afişeze conţinutul octetului specificat şi restul conţinutului fişierului de la octetul specificat (rezolvare...)

7) Sa se scrie un program care face calcule si le afiseaza intr-un fisier, folosind functia fprintf (rezolvare...)

8) In fisierul “D:/test.txt” se aflã mai multe numere despãrtite intre ele prin spatiu. Sã se sorteze elementele acestui vector folosind metoda inteschimbãrii (selectiei directe sau a paharelor), folosind un fisier auxiliar a.i. primul fisier va fi sters iar noul fisier va primi numele celui vechi (rezolvare...)

9) Se citeşte un fişier text ce conţine numere întregi despărţite prin spaţiu sau ENTER. Să se afişeze minimul si maximul dintre valorile existente în acel fişier, precum si ampliturinea sirului de nr (diferenta absoluta intre extreme) (rezolvare...)

10) Se citeşte un fişier text ce conţine numere întregi despărţite prin spaţiu sau ENTER. Să se afişeze suma numerelor pare si suma numerelor impare dintre valorile existente în acel fişier (rezolvare...)

11) Se presupune un fişier text ("vocale.txt") ce conţine o inşiruire de caractere. Să se contorizeze apariţia fiecărei vocale în fişier (rezolvare...)


Rezolvari

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main() 
{
FILE *pf;		//am declarat variabila pointer de fisier
char c,*nume;	
printf("Dati numele fisierului de lucru: ");
nume=(char*)malloc(20*sizeof(char)); //in C standard nu era necesar sa scriu tipul, adica char*
gets(nume); 
if ((pf=fopen("C:\\test.txt", "w"))==NULL) //deschidem sau cream un fisier pt. scriere (eventual suprascriere) 
//cu a in loc de w am fi creat o adaugare la continutul existent la un moment dat in fisier
   {
	printf("Nu se poate deschide fisierul.\n");
	getch();
	exit(1); //iesire fortata din program cu cerinta nesatisfacuta
   }
puts("Scrieti un text. Cu caracterul '$' se incheie:");
do {
	c=getchar(); //in c se introduce un caracter citit de la tastatura
	putc(c,pf); //se putea si fputc(c,pf);
	} while (c !='$'); 
getchar();
fclose(pf);
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
	
  char c;
  FILE *stream;				/*declarare stream (flux de date)*/	
  stream = fopen("C:\\test.txt", "w");	/*deschidere fisier*/
  puts("Scrieti un text. Cu caracterul '$' se incheie:");
  do {
  c=getchar(); 			//in c se introduce un caracter citit de la tastatura
	putc(c,stream); 	//se putea si fputc(c,pf);
	} while (c !='$');
	 getchar();  
fclose(stream);
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
	FILE *pf;				/*declarare stream (flux de date)*/	
	pf = fopen("C:\\test.txt", "r");	/*deschidere fisier*/
 	char c,*nume;
	 if(pf == NULL)
	{
		printf ("Eroare");
		getch();
		exit(1);
	 } 
	printf("Dati numele fisierului de lucru: "); 
	nume=(char*)malloc(20*sizeof(char));
	gets(nume); 
	c=fgetc(pf); 			//citeste un caracter din fisier sau c=getc(pf)
	while (c!=EOF) 			// test daca s-a ajuns la sfarsitul fisierului
	{
		putchar(c); 		//afiseaza un caracter pe ecran
		c=fgetc(pf);
	}
	fclose(pf);
	getchar();
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
	
  char s;
  FILE *stream;				/*declarare stream (flux de date)*/	
  stream = fopen("D:/test.txt", "r");	/*deschidere fisier*/
  if(stream == NULL)
  {
    printf ("Nu se poate deschide fisierul.\n");
	getch();
	exit(1);
  }
  fread(&s, sizeof(char),100,stream);  //sau fgets(&s,100,stream);
  printf("%s", &s);
  getchar();
  fclose(stream);			//inchidere
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
	char sir[256];
	FILE *citire, *scriere;					
	citire = fopen("C:\\test.txt", "r");
	scriere = fopen("D:/test.txt", "w");
	if(citire == NULL)
	{
		printf ("Nu se poate deschide fisierul de citire.\n");
		getch();
		exit(1);
	}
	fgets(sir,sizeof(sir),citire); /* citeste un sir pana se ajunge la lungimea 
				   de caractere specificata din fisierul de citire */
	fputs(sir,scriere);	/*scrie sirul de caractere in fisierul de scriere*/
	printf("Textul copiat este: %s", sir);
	fclose(citire);
	fclose(scriere);
	getchar();
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
  char s;
  FILE *stream;					/*declarare stream (flux de date)*/	
  stream = fopen("D:/test.txt", "r");		/*deschidere fisier*/
  fseek (stream, (3)-1, SEEK_SET);
  if(stream == NULL)
  {
    printf ("Nu se poate deschide fisierul.\n");
	getch();
	exit(1);
  }
  printf("\nElementul de la pozitia 3 este: %c.\n" , fgetc(stream));
	puts("\nRestul fisierului de la pozitia mai sus mentionata este:");
	while (!feof(stream)) //se testeaza daca s-a ajuns la sf. de fisier
	{
		printf("%c",fgetc(stream));
	}
	getchar();
    fclose(stream);			//inchidere
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
	FILE *pf;
	pf = fopen("D:/test.txt", "r");
	int cant=20;
	float pret=2378.64;
	
	 if(pf == NULL)
	{
		printf ("Eroare");
		getch();
		exit(1);
	 }
		fprintf(pf, "\tValoare totala:\n");		//afiseaza in fisier
		fprintf(pf, "\t\tLei: %14.2f\n",cant*pret);	//afiseaza in fisier
		printf("\tValoare totala:\n");			//afiseaza pe ecran
		printf("\t\tLei: %14.2f\n",cant*pret);		//afiseaza pe ecran
		fclose(pf);
	getchar();
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void main()
{
	int n,i=0,j=0,temp,v[50];
	FILE *f,*g;
	if ((f=fopen("D:\\test.txt", "r"))==NULL)
		printf("Eroare la deschiderea fisierului de citire");
	else
		if ((g=fopen("C:\\numere.txt","w"))==NULL)
		{
			printf("Eroare la deschiderea fisierului de scriere.txt");
			fclose(f);
		}
		else
		{
			while(!feof(f))
			{
				fscanf(f,"%d",&v[i]);
				i++;
			}
		n=i; // valoarea finalã a lui i reprezintã nr. de elem. ale vect.
		//sortarea elementelor din fisier
		for(i=0;i<n-1;i++)
		for(j=i+1;j<n;j++)
		if (v[j]<v[i])
		{
			temp=v[i];
			v[i]=v[j];
			v[j]=temp;
		}
		//afisarea elementelor din fisier
		for(i=0;i<n;i++)
		fprintf(g,"%5d",v[i]);
		fclose(f);
		remove("D:\\test.txt");
		fclose(g);
		rename("C:\\numere.txt", "C:\\test.txt");
 
		printf("\nOperatia s-a realizat");
	}
	getchar();
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<limits.h>
void main()
{
	FILE *stream;				/*declarare stream (flux de date)*/	
	stream = fopen("D:\\test.txt", "r");	/*deschidere fisier*/
	if(stream == NULL)
	{		
		printf ("Eroare");
		getch();
		exit(1);
	 }
 
	int x; 				//variabila in care retinem numerele citite
	int maxim=-INT_MAX; 		//consideram maximul cel mai mic numar intreg
	int minim=INT_MAX; 		//consideram minimul cel mai mare numar intreg

	while(!feof(stream))		//atata timp cat nu e sf de fisier
	{
		fscanf(stream,"%d",&x);	//citeste sirul de nr si le compara cu x
		if (x>maxim)
			maxim=x;
		else
			if (x<minim)
				minim=x;
	}
	fclose(stream);
	printf("Maximul din fisier este: %d\n",maxim);
	printf("Minimul din fisier este: %d\n",minim);
	printf("Amplitudinea din fisier este: %d\n",maxim-minim);
 
	getchar();
}


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

 
void main()
{
	FILE *stream;				/*declarare stream (flux de date)*/	
	stream = fopen("D:\\test.txt", "r");	/*deschidere fisier*/
 
	 if(stream == NULL)
	{		
		printf ("Eroare");
		getch();
		exit(1);
	 }
 
int x; 			//variabila in care retinem numerele citite
	int sumaImpar=0;
      int sumaPar=0;
 
	while(!feof(stream))	//atata timp cat nu e sf de fisier
	{
		fscanf(stream,"%d",&x);	//citeste sirul de nr si le compara cu x
         if(x % 2 == 0)
                 sumaPar=sumaPar + x;
         if(x % 2 != 0)
                 sumaImpar=sumaImpar + x;
	}
	fclose(stream);
	printf("sumaImpar este: %d\n",sumaImpar);
	printf("sumaPar este: %d\n",sumaPar);
	
	getchar();
}

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<limits.h>
void main()
{
	char c;
	int a=0,e=0,i=0,o=0,u=0; //a=nr. de aparitii a vocalei "a", s.a.m.d.

	FILE *stream;					/*declarare stream (flux de date)*/	
	stream = fopen("D:\\vocale.txt ", "r");	/*deschidere fisier*/
	if(stream == NULL)
	{		
		printf ("Eroare");
		getch();
		exit(1);
	 }
	while(!feof(stream))		//atata timp cat nu e sf de fisier
	{
		fscanf(stream,"%c",&c);	//sau c=getc(f); sau c=fgetc(f); 
		switch(c)
		{
			case 'a': a++; break;
			case 'e': e++; break;
			case 'i': i++; break;
			case 'o': o++; break;
			case 'u': u++;
		};
	}
	fclose(stream);
	printf("Vocala \"a\" aparare de %d ori.\n",a);
	printf("Vocala \"e\" aparare de %d ori.\n",e);
	printf("Vocala \"i\" aparare de %d ori.\n",i);
	printf("Vocala \"o\" aparare de %d ori.\n",o);
	printf("Vocala \"u\" aparare de %d ori.\n",u);
	getchar();
}