Kurz programovania - lekcia 3. - Zakladna praca so suborom

Sekcia o programovaní, programovacích jazykoch...
Používateľov profilový obrázok
RP
Administrátor
Administrátor
Príspevky: 2549
Dátum registrácie: St 21. Mar, 2001, 20:00
Bydlisko: Kosice

Kurz programovania - lekcia 3. - Zakladna praca so suborom

Príspevok od používateľa RP »

Pokracujeme v kurze programovania pre vsetky jazyky.
vid. http://www.pretaktovanie.sk/modules.php ... ic&t=22117

Pascal

Praca so suborom

Na zaciatok zacnime pre jednoduchost s textovym suborom file.txt.
Nech file.txt obsahuje ciselne udaje v troch stlpcoch a 4 riadkoch napr.

32 45 87
56 89 14
78 69 74
12 36 78

Ukazeme si ako citat data z takehoto suboru.

Syntax

V deklaracii prebemennych si musime definovat premennu pre subor.
napr. aa, mozme dat akekolvek ine oznacenie.

var aa:text; {deklaracia aa za textovy subor}

assign(aa,'file.txt'); {aa je subor file.txt}
reset(aa); {reset zanaci ze zo suboru budeme citat}

readln(aa,h1,h2,h3); {readln je prikaz na citanie, aa urcuje ze sa bude citat zo suboru file.txt a h1, h2, h3 su hodnoty do ktorych budu nacitane premenne zo suboru - tri stlpce, tri premenne}

Program nacita cisla zo suboru file.txt a vypise ich na obrazovku.

Kód: Vybrať všetko

Program Subor;
var aa:text;
       h1,h2,h3:real;  {premenne typu realnych cisel}
       i:integer;
Begin

assign(aa,'file.txt');
reset(aa);

for i:=1 to 4 do 
  begin
    readln(aa,h1,h2,h3);
    writeln(h1,h2,h3);    {vypis hodnot h1, h2, h3 na obrazovku}
  end;

close(aa);   {po ukonceni citania subor zavrieme}

End.
Pozrime sa teraz ako do suboru zapisovat.
Kod bude podobny, len namiesto reset(aa) pouzijeme prikaz rewrite(aa).
Prikaz rewrite(aa) oznacuje ze program ma otvorit subor file.txt a pripravi ho na zapis.

Pozrime sa na priklad ktory zapise vypocet hodnoty faktorialu cisla n.
faktorial cisla n oznacovany ako n! je sucin vsetkych nizsich celych hodnot cisla

1! = 1
2! = 1 * 2 = 2
3! = 1 * 2 * 3 = 6
4! = 1 * 2 * 3 * 4 = 24
atd.

Program vypocita faktorialy cisiel 1 az 10 a zapise ich do suboru file.txt.

Kód: Vybrať všetko

Program Subor;
var aa:text;
       f:real;  {premenne typu realnych cisel}
       i,n:integer;
Begin

assign(aa,'file.txt');
rewrite(aa);

f := 1; {zadefinujeme si prvu hodnotu f ako jedna}

for i:=1 to 10 do   {faktorial cisiel 1 az 10}
  begin
    f := f*i;
    writeln(aa,'faktorial cisla',i:4,' je ',f:12:2);    {vypise hodnoty do suboru}
  end;

close(aa);   {po ukonceni citania subor zavrieme}

End.
Používateľov profilový obrázok
kami_sama
Používateľ
Používateľ
Príspevky: 362
Dátum registrácie: Po 05. Sep, 2005, 20:00
Bydlisko: Bratislava

Príspevok od používateľa kami_sama »

C

v jazyku C na pracu so suborom mame viac moznosti. jeden z nich je praca po znakoch a druha metoda je podobna tomu v pascale.

na to, aby sme vedeli pracovat so suborom, treba vytvorit ukazovatel (pointer) na dany subor. je to nieco podobne zastupcom vo windowse, cize premenne ukazuje na miesto, kde je subor ulozeny.

hore napisany program v C vyzera takto:

Kód: Vybrať všetko

#include <stdio>

int main (){
  FILE *in;
  float h1, h2, h3;
  int i;

  in = fopen ("vstup.txt", "r");

  for (i = 0; i <4> brutal komplikovane, co?  :8O: )
citat zo suboru je celkom trivialne pomocou funkcie fscanf. rozdiel medzi scanf a fscanf je to, ze fscanf ma este jeden parameter naviac, a to je hned prvy, co je ukazovatel suboru.

subor zavreme funkciou fclose (FILE *arg0);

druhy program - zapis do suboru:

Kód: Vybrať všetko

#include <stdio>

int main (){
  FILE *out;
  float f;
  int i, n;

  out = fopen ("vystup.txt", "w");

  f = 1;

  for (i = 1; i < 11; i++){
    f *= i;
    fprintf (out, "faktorial cisla %d je %12.2f\n", i, f);
  }

  flcose (out);

  return (0);
}
kod je prepis z pascalu do C.
funkcia fprintf je vlastne ekvivalent funkcie printf, len ako v predchadzajucom priklade, teraz nepracuje so standardnym vystupom (obrazovka), ale so suborom.

este doplnim:

pri nacitavani pomocou scanf, alebo fscanf, ciselne hodnoty nacitame pomocou &a (vid. prvy priklad &h1, ...). znak & znamena, ze nenacitame hodnotu, ale adresu premennej.

samozrejme v prvom priklade by sa dalo citat hodnoty aj po jednom a tiez nemusime vzdy poznat dlzku suboru. ked nepozname dlzku, mozeme otestovat subor napr. nasledovne:

Kód: Vybrať všetko

...tu je este vsetko povodne...

for (i = 0; fscanf (in, "%f", &h1) != EOF; i++){
    printf ("%6.2f\n", h1);
  }

... tiez vsetko ostava ...
vysvetlivky:
vieme, ze cyklus for vykona prvy parameter (i = 0) pri inicializacii.
druhy parameter je vlastne podmienka a treti parameter je akcia, co treba vykonat vtedy, ked podmienka je splnena.
funkcia fscanf vrati hodnotu typu int (cize cele cislo) vtedy, ked nacital nieco (vrati pocet nacitanych znakov). v pripade, ze uz nacital vsetko, vrati hodnotu EOF (End Of File).

asi tolko.

ked nieco je nejasne, pytat sa.
LittleMan
Používateľ
Používateľ
Príspevky: 810
Dátum registrácie: Pi 27. Máj, 2005, 20:00
Bydlisko: NR - okolie, Brno

Príspevok od používateľa LittleMan »

ja iba odkazem na delphi (nieco je este z pascalu ...) skripta nasej skoly - celkom dobre spracovanie ...

http://www.gymparnr.edu.sk/informatika.html
Life is short - enjoy it!
HP ProBook 6470b, 8GB RAM, SSD | Intel Pentium 4 2.80GHz, 2xKingston DDR 512MB, Intel D875PBZ, Radeon 9800XT, 3×SATA (600GB)

Návrat na "Programovanie"