Sunteți pe pagina 1din 19

Tema 2 – Fisiere

1.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.
1.1 Codul Sursa
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
char sir[256];
FILE *citire, *scriere;
citire = fopen("d:\\tema1.txt", "r");
scriere = fopen("e:/tema1.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();
}
1.2 Rularea aplicatiei

2.Sa se realizeze un program care citeşte de la tastatură un text de mai multe linii şi îl scrie într-un
fişier text.
2.1 Codul sursa
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
FILE *pf; //am declarat variabila pointer de fisier
char c,*nume;
printf("Denumirea fisierului de lucru: ");
nume=(char*)malloc(20*sizeof(char));
gets(nume);
if ((pf=fopen("d:\\e2.txt", "w"))==NULL)
{
printf("Nu se poate deschide fisierul.\n");
getch();
exit(1);
}
puts("Scrieti un text. Cu caracterul '$' se incheie:");
do {
c=getchar();
putc(c,pf);
} while (c !='$');
getchar();
fclose(pf);

2.2 Rularea aplicatiei

3.Sa se realizeze un program care citeşte de la tastatură câteva înregistrări de tip informaţii
informaţii despre apartamente - nrApart, nrCamere, strada etc şi le scrie într-un fişier.

3.1 Codul sursa


#include <stdio.h>
#include <string.h>
#define DIM 100
typedef struct
{
int apartament;
char camere[20];
}strada;
strada tab[DIM];
int n;
void cit_sir (char *sir)
{
do
{
gets (sir);
}while (strlen (sir) == 0);
}
int main (void)
{
FILE *f;
int i;
printf ("nr inregistrari? ");
scanf ("%d", &n);
for (i = 0; i < n; i++)
{
printf (" nr apartament %d:", i + 1);
scanf ("%d", &tab[i].apartament);

printf ("nr camere %d: ", i + 1);


cit_sir (tab[i].camere);

printf ("nr strada %d: ", i + 1);


cit_sir (tab[i].camere);
}

f = fopen ("ex_binar.bin", "wb");


if (f == NULL)
printf ("Fisierul nu se poate crea!");
else
{

fwrite (tab, sizeof (strada), n, f);


fclose (f);
}
return 0;
}

3.2 Rularea aplicatiei


4.Sa se creeze un fisier de tip text cu informatiile introduse de la tastatura linie cu linie si apoi sa se afiseze pe ecran
acest fisier tot linie cu linie
4.1 Codul sursa
#include <stdio.h>
#include <conio.h>
int main()
{
char ch, s[100], nume_fis[50]="D:\\test.txt";
int i;
FILE *pf;
pf=fopen(("D:\\test.txt ","w");
printf("Introduceti textul. Pentru a termina apasati CTRL+Z si ENTER \n");
while ((ch=fgetc(stdin))!=EOF)
{
fputc(ch,pf);
}
fclose(pf);

pf=fopen(nume_fis,"r+");
fseek(pf,0l,SEEK_END);
printf("Introduceti sirurile de caractere terminate cu ENTER. Pentru a termina\
apasati CTRL+Z si ENTER\n");
while(fgets(s,100,stdin)!=(char*)0)
{
fputs(s,pf);
}
fclose(pf);

printf("CONTINUTUL FISIERULUI cu NUMEROTAREA LINIILOR:\n");


i=0;
pf=fopen(nume_fis,"r");
while(fgets(s,100,pf)!=(char *)0)
{
printf("%d %s", i, s);
i++;
}
fclose(pf);
getch();
return 0;
}
4.2 Rularea aplicatiei
5.Sa se creeze un fisier de tip text de numere reale. Apoi sa se citeasca acest fisier si sa se calculeze media aritmetica a
acestor numere reale citite din fisierul creat.
5.1 Codul sursa
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
long a, b, c;
// deschide fisierul pentru citire si dupa pentru adaugare:
fstream f("numere3.txt", ios::in | ios::app);
// se testeaza daca fisierul poate fi deschis:
if (!f)
{
// afiseaza un mesaj:
cout << "Eroare la deschiderea fisierului.\n";
// se paraseste programul:
return 0;
}
// citeste numerele din fisier:
f >> a >> b >> c;
f << endl;
// calculeza si adauga media in fisier:
f << "Media aritmetica este: " << (float)(a + b + c) / 3;
// inchide fisierul:
f.close();
// se termina programul:
cout << "Gata! Vizualizati fisierul 'numere3.txt'!\n";
}
6.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
6.1 Codul sursa
#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"
FILE *stream;
stream = fopen("D:\\vocale.txt ", "r");
if(stream == NULL)
{
printf ("Eroare");
getch();
exit(1);
}
while(!feof(stream))
{
fscanf(stream,"%c",&c);
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();
}
6.2 Rularea aplicatiei
7.Sa se scrie un program care face calcule si le afiseaza intr-un fisier, folosind functia fprintf
7.1 Codul sursa
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
FILE *pf;
pf = fopen("D:/calcul.txt", "r");
int cant=5;
float pret=2000;

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();
}

7.2 Rularea Aplicatiei


8.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.
8.1 Codul sursa
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<limits.h>
void main()
{
FILE *stream; /
stream = fopen("D:\\test.txt", "r");
if(stream == NULL)
{
printf ("Eroare");
getch();
exit(1);
}

int x; /
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))
{
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);

getchar();
}

8.2 Rularea Aplicatiei

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 suma numerelor pare si
suma numerelor impare dintre valorile existente în acel fişier
9.1 Codul Sursa
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
FILE *stream;
stream = fopen("D:\\test.txt", "r");

if(stream == NULL)
{
printf ("Eroare");
getch();
exit(1);
}

int x;
int sumanrImpare=0;
int sumanrPare=0;

while(!feof(stream))
{
fscanf(stream,"%d",&x);
if(x % 2 == 0)
sumanrPare=sumanrPare + x;
if(x % 2 != 0)
sumanrImpare=sumanrImpare + x;
}
fclose(stream);
printf("sumanrImpare este: %d\n",sumanrImpare);
printf("sumanrPare este: %d\n",sumanrPare);

getchar();
}
9.2 Rularea aplicatiei

10.Să se realizeze un program care copiază dintr-un fişier text într-un alt fişier text doar liniile care
conţin un anumit cuvânt, introdus de la tastatură.
#include <stdio.h>
#include <stdlib.h>

#define SIZE 1024

int main(void)
{

FILE *fin, *fout;


unsigned char buffer[SIZE];

int rez;

/* Deschidem fisierul sursa pentru citire binara. */


fin = fopen("a.dat", "rb");
if (!fin) {
perror("Nu pot deschide fisierul sursa");
exit(EXIT_FAILURE);
}

/* Deschidem fisierul destinatie pentru scriere binara.


*/
fout = fopen("b.dat", "wb");
if (!fout) {
perror("Nu pot deschide fisierul destinatie");
exit(EXIT_FAILURE);
}

while ((rez = fread(buffer, 1, SIZE, fin)) > 0) {

fwrite(buffer, 1, rez, fout);


}

/* Inchidem cele doua fisiere. */


fclose(fin);
fclose(fout);

return 0;
}
10.2 Rularea Aplicatiei

11.Se dau n elevi. Pentru acestia se citesc: numele şi două note la matematica. Să se calculeze media fiecărui elev.
11.1 Codul sursa
#include<iostream.h>
#include<string.h>
struct elev
{char nume[25];
 int n1,n2;
float media;
};
elev a[25];
int n;
void citire()
{int i;
 for(i=1; i<=n; i++)
 {cout<<"numele: "; cin.get();cin.get(a[i].nume,20,'\n');
   cout<<"nota1: "; cin>>a[i].n1;
   cout<<"nota2: "; cin>>a[i].n2;
  a[i].media=(((float)a[i].n1+a[i].n2)/2);
  };};
void afisare()
{int i;
 for(i=1; i<=n; i++)
 cout<<a[i].nume <<" "<<a[i].n1<<" "<<a[i].n2<<" "<<a[i].media<<endl;
};
void ordonare()
{int i,g;
 elev aux;
 do{  g=1;
for(i=1; i<n; i++)
 if((a[i+1].media>a[i].media)||(a[i+1].media==a[i].media && strcmp(a[i+1].nume,a[i].nume)<0))
   {aux=a[i+1];   a[i+1]=a[i];    a[i]=aux;    g=0;   }
 } while(!g); #include<iostream.h>
#include<string.h>
struct elev
{char nume[25];
int n1,n2;
float media;
};
elev a[25];
int n;
void citire()
{int i;
for(i=1; i<=n; i++)
{cout<<"numele: "; cin.get();cin.get(a[i].nume,20,'\n');
cout<<"nota1: "; cin>>a[i].n1;
cout<<"nota2: "; cin>>a[i].n2;
a[i].media=(((float)a[i].n1+a[i].n2)/2);
};};
void afisare()
{int i;
for(i=1; i<=n; i++)
cout<<a[i].nume <<" "<<a[i].n1<<" "<<a[i].n2<<" "<<a[i].media<<endl;
};
void ordonare()
{int i,g;
elev aux;
do{ g=1;
for(i=1; i<n; i++)
if((a[i+1].media>a[i].media)||(a[i+1].media==a[i].media && strcmp(a[i+1].nume,a[i].nume)<0))
{aux=a[i+1]; a[i+1]=a[i]; a[i]=aux; g=0; }
} while(!g);
};
void main()
{ cout<<"n=";cin>>n;
citire(); afisare();
ordonare();
cout<<"Elevii in ordinea descrescatoare a mediilor"<<endl;
afisare();
};};
void main()
{ cout<<"n=";cin>>n;
 citire(); afisare();
 ordonare();
 cout<<"Elevii in ordinea descrescatoare a mediilor"<<endl;
 afisare();
12. Se citesc de la tastatură două numere complexe. Să se efectueze adunarea, scaderea, înmulţirea şi împărţirea
acestor doua numere complexe.
12.1 Codul Sursa
#include <iostream.h>  
#include <conio.h>
struct complex
 {float x,y;
 };
complex a,b,c;
void afisare(complex e)
{if(e.y>=0)
   cout<<e.x<<"+"<<e.y<<"i"<<endl;
   else
   cout<<e.x<<e.y<<"i"<<endl;
};
void adunare()
  {c.x=a.x+b.x;
   c.y=a.y+b.y;
  };
void scadere()
  {c.x=a.x-b.x;
   c.y=a.y-b.y;
  };
void inmultire()
  {c.x=a.x*b.y-a.y*b.x;
   c.y=a.x*b.y+a.y*b.x;
  };
void impartire()
  {c.x=(a.x*b.x+a.y*b.y)/(b.x*b.x+b.y*b.y);
   c.y=(a.y*b.x-a.x*b.y)/(b.x*b.x+b.y*b.y);
  };
void main()
  {cout<<"primul numar:"; cin>>a.x>>a.y;
   cout<<"al doilea numar:"; cin>>b.x>>b.y;
   cout<<"a=";   afisare(a);
   cout<<"b=";   afisare(b);
   adunare();
   cout<<"suma=";
   afisare(c);
   scadere();
   cout<<"diferenta=";
   afisare(c);
   inmultire();
   cout<<"produsul=";
   afisare(c);
   impartire();
   cout<<"impartire=";
   afisare(c);   
 };
13. Să se scrie un program care sa administreze un parc de automobile. Informaţiile relative la un automobil sunt:
numărul de locuri, puterea (în cai putere), marca, culoarea, anul fabricaţiei maşinii.
- se vor citi informatiile relative la cele n automobile din parcul de autoturisme. Se vor afisa doar acele automobilele
care au 5 locuri
- sa se scrie o functie care afiseaza toate automobilele fabricate într-un anumit an dat ca parametru.
13.1 Codul sursa
#include<stdio.h>
#include<conio.h>
typedef struct
{
char marca[20];
char model[20];
char cul[20];
int an;
struct
{
char nl;
int put;
}date;
}automobil;
typedef automobil masini[20];
void citire(masini a, int *n)
{
int i;
printf("Dati nr. de automobile: ");
scanf("%d",n);
for(i=0; i<*n; i++)
{
printf("Introduceti datele despre automobilul %d\n",i+1);
printf("\tmarca: ");
scanf("%s",a[i].marca);
printf("\tmodelul: ");
scanf("%s",a[i].model);
printf("\tculoarea: ");
scanf("%s",a[i].cul);
printf("\tanul: ");
scanf("%d",&a[i].an);
printf("\tnumarul de locuri: ");
scanf("%d",&a[i].date.nl);
printf("\tputerea in cai putere: ");
scanf("%d",&a[i].date.put);
}
}

void afisare(masini a,int n)


{
int i;
for (i=0;i<n;i++)
{
printf("Automobil [%d]:\n",i+1);
printf("\tmarca: %s\n",a[i].marca);
printf("\tmodelul: %s\n",a[i].model);
printf("\tculoarea: %s\n",a[i].cul);
printf("\tan fabr.: %d\n",a[i].an);
printf("\tnr locuri: %d\n",a[i].date.nl);
printf("\tputerea: %d\n\n",a[i].date.put);
}
}
void an(masini a,int n,int p)
{
int i;
for(i=0;i<n-1;i++)
{
if(a[i].an=p)
{
printf("Automobil [%d]:\n",i+1);
printf("\tmarca: %s\n",a[i].marca);
printf("\tmodelul: %s\n",a[i].model);
printf("\tculoarea: %s\n",a[i].cul);
printf("\tan fabr.: %d\n",a[i].an);
printf("\tnr locuri: %d\n",a[i].date.nl);
printf("\tputerea: %d\n\n",a[i].date.put);
}
}
}
void main()
{
masini a;
int n,aux,i,j,p;
citire(a,&n);
afisare(a,n);
for(i=0;i<n;i++)
{
if(a[i].date.nl=5)
{
printf("Automobil [%d]:\n",i+1);
printf("\tmarca: %s\n",a[i].marca);
printf("\tmodelul: %s\n",a[i].model);
printf("\tculoarea: %s\n",a[i].cul);
printf("\tan fabr.: %d\n",a[i].an);
printf("\tnr locuri: %d\n",a[i].date.nl);
printf("\tputerea: %d\n\n",a[i].date.put);
}
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(a[i].date.put>a[j].date.put)
{
aux=i;
i=j;
j=aux;
}
}
afisare(a,n);
printf("\n\tDati anul dupa care vor fi afisate masinile: ");
scanf("%d",&p);
an(a,n,p);

getchar();
int k;
scanf("%d", &k);

}
13.2 Rularea Aplicatiei

14. La o staţie de benzină există mai multe maşini caracterizate prin număr, marcă şi culoare. Să se determine numărul
maşinilor Dacia.
14.1 Codul sursa
#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{char marca[20],culoare[20],med[20];
int nr;}masina ;
masina a[20];
int n,x,k;
void citire()
{int i;
cout<<"n=";cin>>n;
for (i=1;i<=n;i++)
{cout<<„a[i].marca: „;cin>>a[i].marca;
cout<<„a[i].culoare: „;cin>>a[i].culoare;
cout<<„a[i].numar: „;cin>>a[i].nr;
}
}
void nr_dacia()
{ int i;
int nr=0;
for (i=1;i<=n;i++)
{x=strcmp(a[i].marca,"dacia");
if (x==0) nr=nr+1;}
cout<<"numarul de masini Dacia este "<<nr<<"\n";
}
void sortare()
{ int i,j;masina aux;

for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{x=strcmp(a[i].culoare,a[j].culoare);
if(x>0)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
for (i=1;i<=n;i++)
cout<<a[i].culoare<<" "<<a[i].marca<<""<<a[i].nr<<endl;
}

void main()
{
citire();
nr_dacia();
sortare();
}
void sortare()
{ int i,j;masina aux;
for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{x=strcmp(a[i].culoare,a[j].culoare);
if(x>0)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
for (i=1;i<=n;i++)
cout<<a[i].culoare<<” „<<a[i].marca<<” „<<a[i].nr<<endl;
}
void main()
{
citire();
nr_dacia();
sortare();
}

15. Pentru evidenţa produselor cosmetice dintr-un depozit, se defineşte o structură cu următoarele informaţii: codul
produsului, denumire, preţul produsului. Citiţi informaţiile tuturor produselor şi afişaţi produsele cu noile preţuri
(valoarea lui x este 7 dacă codul produsului este mai mic decât 500. Şi 11 în caz contrar). Afişaţi produsele cu cel mai
mare preţ după scumpire.
15.1 Codul sursa
#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{int cod,c,p,pret;
char den[20];}produse;
produse a[20];
int n,i,c,p;
void citire()
{
cout<<"Dati numarul de produse ";cin>>n;
for (i=1;i<=n;i++)
{cout<<"codul produsului ";cin>>a[i].cod;
cout<<"pretul produsului ";cin>>a[i].pret;
cout<<"denumirea produsului ";cin>>a[i].den;}
}
void rezolvare()
{
for (i=1;i<=n;i++)
if(a[i].cod<500) a[i].pret=7;
else a[i].pret=11;
for (i=1;i<=n;i++)
cout<<"pretul "<<a[i].den<<" este "<<a[i].pret<<"\n";
cout<<endl;
for (i=1;i<=n;i++)
if(a[i].pret==11) cout<<a[i].den<<"\n";
}
void main()
{
citire();
rezolvare();
}

15.2 Rularea aplicatiei

S-ar putea să vă placă și