Documente Academic
Documente Profesional
Documente Cultură
FCIM
Catedra Informatica Aplicativă
RAPORT
la lucrarea de laborator nr. 3
Varianta 24
la SDA
Tema: “Fisiere”
spre blocuri
de date
Pentru primele 10 blocuri din fişier adresele sunt trecute chiar în i-nod, fiind foarte uşor de accesat. Pentru fişiere
mai lungi de 10 blocuri se alocă un bloc de pointeri pe disc ce va fi accesat prin intermediul primului pointer indirect.
Pointerul dublu către blocuri de pointeri ce pointează la blocuri de pointeri către blocuri de date. Pointerul triplu
acţionează după un raţionament similar. Doar cu ajutorul pointerului dublu pot fi accesaţi 64 kblocuri.
Esenţial la acest sistem este faptul că blocurile de pointeri indirecţi sunt utilizate (încărcate în memorie) doar dacă
este necesar, făcându-se cel mult trei referinţe la disc oricât de lung ar fi fişierul.
Programul dat va citi dintr-un fisier of propozitie delimitata prin punct s-au semnul exclamarii
va interschimba primul cuvint cu al treilea si va afisa cuvintele dupa interschimbare.
Greaseala programului este ca variabilele s,s1 trebuiesc alocati dinamic s-au de inlocuit
cu variabile statice(tablou si matrice).
Programul corect:
1. #include<conio.h>
2. #include<stdio.h>
3. #include<string.h>
4. #include<stdlib.h>
5. int main() { int i,n;
6. FILE *f;
7. f=fopen("input.txt","r");
8. char *s,**s1,*aux;
9. s = (char*)malloc(sizeof(char)*1000);
10. fgets(s,1000,f);
11. for(i=0,n=0;i<strlen(s);i++) if((s[i]=='.')||(s[i]=='!')) n++;
12. s1 = (char**)malloc(sizeof(char*)*n);
13. for(i = 0 ; i < n ; ++i)
14. s1[i] = (char*)malloc(sizeof(char)*20);
15. s1[0]=strtok(s,".!");
16. for(i=1;i<n;i++) s1[i]=strtok(NULL,".!");
17. aux=s1[0]; s1[0]=s1[2]; s1[2]=aux;
18. for(i=0;i<n;i++)printf("%s ",s1[i]);
19. fclose(f);
20. getch();
21. }
27. Să se scrie programul care creează un fişier text în care se memorează două matrice, astfel: pe
prima linie numărul de linii şi numărul de coloane ale primei matrice, separate printr-un spaţiu; pe
fiecare din liniile următoare, în ordine, elementele unei linii din matrice, separate prin cîte un spaţiu;
în continuare a doua matrice, în aceeaşi formă.. Apoi de afişat.
Listingul Programului:
1. #include<conio.h>
2. #include<stdio.h>
3. #include<string.h>
4. #include<stdlib.h>
5.
6. int main()
7. {
8.
9. system("cls");
10. int A[10][10],N,M,i,j,k;
11. FILE *f = fopen("input.txt","w");
12. for(k = 1 ; k <= 2 ; ++k){
13. printf("Dati numarul de linii si coloane:");
14. scanf("%d%d",&N,&M);
15. fprintf(f,"%d %d\n",N,M);
16. for(i = 1 ; i <= N ; ++i){
17. for(j = 1 ; j <= M ; ++j){
18. printf("Dati A[%d][%d]:",i,j);
19. scanf("%d",&A[i][j]);
20. fprintf(f,"%d ",A[i][j]);
21. }
22. fprintf(f,"\n");
23. }
24. }
25. fclose(f);
26. system("cls");
27. f = fopen("input.txt","r");
28. for(k = 1 ; k <= 2 ; ++k){
29. fscanf(f,"%d%d",&N,&M);
30. printf("%d %d\n",M,N);
31. for(i = 1 ; i <= N ; ++i){
32. for(j = 1 ; j <= M ; ++j){
33. fscanf(f,"%d",&A[i][j]);
34. printf("%d ",A[i][j]);
35. }
36. printf("\n");
37. }
38. }
39. fclose(f);
40. }
Problema 24:
Sa se scrie un fisier de comenzi care are ca parametri doua cuvinte si o
lista de fisiere. Sa se construiasca un fisier prin concatenarea fisierelor
din lista dupa ce se aplica urmatoarele modificari: pentru fisierele de
rang impar din lista se vor inlocui toate aparitiile primului cuvant cu al
doilea, iar pentru fisierele de rang par, se va inlocui aparitiele din fiecare
linie a celui de-al doilea cuvant cu primul.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CHARS 256
string words[2];
FILE *fCommands;
fCommands=fopen("comenzi.txt",
"w+");
if(fCommands==NULL){
perror("Eroare la deschiderea
fisierului!");
return(-1);
}
printf("Introduceti doua cuvinte:\n");
for(i=0;i<2;i++){
scanf("%s",&words[i]);
fprintf(fCommands,"%s\n",words[i]);
}
printf("Introduceti numarul de fisiere
pentru prelucrare:\n");
scanf("%d",&numFiles);
string files[numFiles];
for(i=0;i<numFiles;i++){
scanf("%s",&files[i]);
fprintf(fCommands,"%s\n",files[i]);
}
fclose(fCommands);
FILE *fNew;
fNew=fopen("newFile.txt", "w+");
if(fNew==NULL){
perror("Eroare la deschiderea
fisierului!");
return(-1);
}
for(i=0;i<numFiles;i++)
newFile(files,fNew);
return 0;
}
void newFile(string file[],FILE* destination){
char buff[256],ch;
string gotWords[20];
int i,j;
static int id=0;
FILE *f;
f=fopen(file[id],"r");
if((id+1) % 2!=0){
while(!feof(f)){
fscanf(f,"%s",buff);
if(strcmp(buff,words[0])==0){
if((ch=fgetc(f))!='\n'){
fprintf(destination,"%s ",words[1]);
}else{
fprintf(destination,"%s\n",words[1]);
}
}else{
if((ch=fgetc(f))!='\n'){
fprintf(destination,"%s ",buff);
}else{
fprintf(destination,"%s\n",buff);
}
}
}
fprintf(destination,"%c",'\n');
}else{
while(!feof(f)){
fscanf(f,"%s",buff);
if(strcmp(buff,words[1])==0){
if((ch=fgetc(f))!='\n'){
fprintf(destination,"%s ",words[0]);
}else{
fprintf(destination,"%s\n",words[0]);
}
}else{
if((ch=fgetc(f))!='\n'){
fprintf(destination,"%s ",buff);
}else{
fprintf(destination,"%s\n",buff);
}
}
}
}
id++;
fclose(f);
}