Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare-cc:laboratoare:11 [2021/01/12 13:33]
andrei.simescu [Problema 2 (Rezolvata)]
programare-cc:laboratoare:11 [2023/12/20 14:41] (current)
mihai.nan [Problema 1 (Rezolvata)]
Line 1: Line 1:
 ===== Laboratorul 11. Fişiere text. Argumente în linia de comandă ===== ===== Laboratorul 11. Fişiere text. Argumente în linia de comandă =====
 +
  
 În acest laborator veţi învăţa să: În acest laborator veţi învăţa să:
   * Citiţi şi scrieţi date din fişiere text.   * Citiţi şi scrieţi date din fişiere text.
   * Trimiteţi şi folosiţi argumente în linia de comandă.   * Trimiteţi şi folosiţi argumente în linia de comandă.
 +
 +====Fişiere text====
 +Pentru a realiza operaţii cu fişiere text se folosesc funcţii şi structuri definite în stdio.h:
 +
 +**FILE** este o structură ce conţine informaţiile necesare controlării unui fişier.
 +
 +''​FILE * fopen ( const char * filename, const char * mode )''​ asociază fişierul cu o structură FILE şi întoarce un pointer la această
 +structură. Dacă fişierul nu există sau nu a putut fi deschis, se va întoarce NULL. mode reprezintă modul de access dorit:
 +  * **"​r"​** deschide fişierul pentru citire; fişierul trebuie să existe.
 +  * **"​w"​** creează un fişier gol pentru scriere; dacă există deja un fişier cu acelaşi nume, conţinutul lui este şters şi este tratat ca un fişier gol.
 +  * **"​a"​** adaugă datele la sfârşitul fişierului; fişierul este creat dacă nu există.
 +  * **"​r+"​** deschide un fişier atât pentru scriere, cât şi pentru citire; fişierul trebuie să existe.
 +  * **"​w+"​** creează un fişier gol atât pentru scriere, cât şi pentru citire; dacă există deja un fişier cu acelaşi nume, conţinutul lui este şters şi este tratat ca un fişier gol.
 +  * **"​a+"​** deschide un fişier pentru citire şi adăugare la sfârşit; se poate citi de la orice poziţie din fişier, însă scrierea se face doar la sfârşit; fişierul este creat dacă nu există
 +
 +''​int fclose ( FILE * file )''​ închide fişierul asociat cu structura file şi îl dezasociază.
 +
 +Funcţii de citire şi afişare pentru fişiere:
 +  * ''​int fgetc ( FILE * f );''​ întoarce următorul caracter din fişier convertit la int sau EOF dacă s­a întâlnit sfârşitul de fişier sau o eroare.
 +  * ''​char *fgets ( char *buf, int nmax, FILE * f )''​ citeşte caractere din fişier până cănd se întâlneşte '​\n'​ (este şi el adăugat la şir) sau până când s­au citit nmax ­ 1 caractere.
 +  * ''​int fputc ( int c, FILE * f )''​ scrie caracterul c în fişier; funcţia întoarce caracterul scris, în caz de success sau EOF altfel.
 +  * ''​int fputs ( char *buf, FILE *f )''​ scrie şirul buf în fişier; în caz de eroare se întoarce EOF, altfel se întoarce o valoare non­negativă.
 +  * ''​int fscanf ( FILE *f, const char * format, ... )''​
 +  * ''​int fprintf ( FILE *f, const char * format, ... )''​
 +
 +====Argumente în linia de comandă====
 +Pentru a specifica argumente în linia de comandă, antetul funcţiei main va trebui să fie de forma:
 +<code c>  int main ( int argc, char *argv[] ); </​code>​
 +**argc** reprezintă numărul de argumente, iar **argv** vectorul de pointeri la argumente (şiruri de caractere). Primul argument argv[ 0 ] este
 +întotdeauna **numele executabilului**.
 +Pentru a seta argumentele din CodeBlocks va trebui să adăugaţi fişierul sursă la un proiect şi apoi să selectaţi: Project ­> Set programs'​
 +arguments.
 +
 +
  
 ==== Problema 1 (Rezolvata) ==== ==== Problema 1 (Rezolvata) ====
Line 26: Line 61:
     ​     ​
     pFile = fopen("​myfile.txt"​ , "​r"​);​     pFile = fopen("​myfile.txt"​ , "​r"​);​
-    if (pFile == NULL)+    if (pFile == NULL) {
         printf("​Nu s-a putut deschide fisierul"​);​         printf("​Nu s-a putut deschide fisierul"​);​
 +        return 1;
 +    }
     ​     ​
     while (fgets(buffer,​ BUFMAX, pFile) != NULL) {     while (fgets(buffer,​ BUFMAX, pFile) != NULL) {
- printf("​%s",​ buffer);+        ​printf("​%s",​ buffer);
     }     }
- fclose(pFile);​+    ​fclose(pFile)
 +    return 0;
 } }
 </​code>​ </​code>​
 +
 +
 ==== Problema 2 (Rezolvata) ==== ==== Problema 2 (Rezolvata) ====
 Scrieţi un program pentru concatenarea mai multor fişiere text într­un fişier destinaţie. Programul va primi numele fişierelor ca Scrieţi un program pentru concatenarea mai multor fişiere text într­un fişier destinaţie. Programul va primi numele fişierelor ca
-argumente în linia de comandă, în următoarea ordine: destinatie ​sursa1 sursa2 ... sursan.+argumente în linia de comandă, în următoarea ordine: destinatie ​$sursa_1, sursa_2 \dots sursa_n$.
  
 ==Date de intrare== ==Date de intrare==
-Fişierele de intrare ​sursa1 sursa2 ... sursan.+Fişierele de intrare ​$sursa_1, sursa_2 \dots sursa_n$.
 ==Date de ieşire== ==Date de ieşire==
 Fişierele de intrare concatenate în fişierul destinaţie. Fişierele de intrare concatenate în fişierul destinaţie.
Line 89: Line 129:
 ==Exemplu== ==Exemplu==
 Pentru a căuta în fişierul input.txt stringul vacanta: Pentru a căuta în fişierul input.txt stringul vacanta:
-./​executabil input.txt vacanta+ 
 +**./​executabil input.txt vacanta**
  
 ^ input.txt ^ stdout ​   ^ ^ input.txt ^ stdout ​   ^
-|Mai e putin si vine vacanta \\ Mie nu imi plac pointerii dar iubesc vacanta \\ Abia astept sesiunea \\ Haideti sa mergem la un suc chiar acum \\ Cine stie sa se dea cu placa de snowboard ?! \\ Vacanta asta merg la Predeal si ma dau cu placa :) \\ Ma asteapta o sesiune infernala :-( \\ Vine vacanta cu trenul din Franta ... \\ La multi ani 2014 | Mai e putin si vine vacanta \\ Mie nu imi plac pointerii dar iubesc vacanta \\ Vine vacanta cu trenul din Franta ... |+|Mai e putin si vine vacanta \\ Mie nu imi plac pointerii dar iubesc vacanta \\ Abia astept sesiunea \\ Haideti sa mergem la un suc chiar acum \\ Cine stie sa se dea cu placa de snowboard ?! \\ Vacanta asta merg la Predeal si ma dau cu placa :) \\ Ma asteapta o sesiune infernala :-( \\ Vine vacanta cu trenul din Franta ... \\ La multi ani 2021 | Mai e putin si vine vacanta \\ Mie nu imi plac pointerii dar iubesc vacanta \\ Vine vacanta cu trenul din Franta ... |
  
  
Line 116: Line 157:
 ==Exemplu== ==Exemplu==
 Dacă, căutăm în fişierul input.txt stringul vacanta: Dacă, căutăm în fişierul input.txt stringul vacanta:
-./​executabil ­c ­i ­n input.txt vacanta+ 
 +**./​executabil ­c ­i ­n input.txt vacanta**
  
 ^ input.txt ^ stdout ​   ^ ^ input.txt ^ stdout ​   ^
Line 138: Line 180:
 ==Exemplu== ==Exemplu==
 Aplicăm algoritmul de codare pe fişierul input.txt şi vom obţine un fişier output.txt. Aplicăm algoritmul de codare pe fişierul input.txt şi vom obţine un fişier output.txt.
-./​executabil tabela_de_codare.in input.txt output.txt+ 
 + 
 +**./​executabil tabela_de_codare.in input.txt output.txt**
  
 ^ Intrare (input.txt ) ^ Ieşire (output.txt) ^ ^ Intrare (input.txt ) ^ Ieşire (output.txt) ^
programare-cc/laboratoare/11.1610451188.txt.gz · Last modified: 2021/01/12 13:33 by andrei.simescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0