printf - formatovany vystup
Formatove specifikace: %d - na toto misto se v retezci dosadi cele cislo %f - desetinne cislo %e - cislo v semilogaritmickem tvaru %s - retezec s 2 az 6 znaky \n - novy radek > printf(" cislo v desitkove soustave: %d \n retezec: %s \n desetinny zapis: %f \n cislo ve tvaru a*10^b: %e: ", 21, ahoj, 2346.89, 1000); cislo v desitkove soustave: 21 retezec: ahoj desetinny zapis: 2346.890000 cislo ve tvaru a*10^b: 1.000000e+03: %w.p F F 2{d (cislo v desitkove soustave - s p ciframi), o (v 8-ove soustave), x (v 16-ove soustave), e (ve tvaru 1.34e2 - s p ciframi za desetinnou carkou), f (desetinne cislo - p desetinnych mist), c (1 znak), s (retezec s w az p znaky)}
> printf("Prvni radek \nDruhy radek"); Prvni radek Druhy radek > printf("Cislo osm %d zapsano", 8); Cislo osm 8 zapsano > printf("Cislo osm %20d zapsano na 20 mist", 8); Cislo osm 8 zapsano na 20 mist > printf("Cislo osm %020d zapsano na 20 mist doplneno nulami", 8); Cislo osm 00000000000000000008 zapsano na 20 mist doplneno nulami > printf("Cislo osm %20.10d zapsano na 20 mist, do 10 mist doplni nuly", 8); Cislo osm 0000000008 zapsano na 20 mist, do 10 mist doplni nuly > ec := exp(1); (1.1) > printf("Eulerovo cislo %f ", ec); Eulerovo cislo 2.718282 > printf("Eulerovo cislo %30f ", ec); Eulerovo cislo 2.718282 > printf("Eulerovo cislo %30.20f ", ec);
Eulerovo cislo > Digits := 21;
2.71828182800000000000 (1.2)
> > printf("Eulerovo cislo %30.20f ", ec); Eulerovo cislo 2.71828182845904523536 > printf("Eulerovo cislo %4.2f ", 2.7182); Eulerovo cislo 2.72 >
Zapis a cteni dat - do a ze souboru fopen (soubor, WRITE n READ n APPEND) - otevre soubor ke cteni nebo zapisu - otevre soubor k zapisu pokud existuje nebo pokud uz neni otevren (pri otevreni smaze jeho obsah) - vytvori soubor a otevre ho k zapisu pokud soubor neexistuje - chybove hlasky: pokud je soubor jiz otevren, pokud je jiz otevren maximalni pocet souboru (zavisi na systemu) - otevre soubor ke cteni pokud existuje nebo pokud uz neni otevren - chybove hlasky: pokud je soubor jiz otevren, pokud je jiz otevren maximalni pocet souboru (zavisi na systemu), pokud soubor neexistuje - otevre soubor k zapisu pokud existuje nebo pokud uz neni otevren (zapisovat zacne na konec souboru) - vytvori soubor a otevre ho pokud soubor neexistuje - chybove hlasky: pokud je soubor jiz otevren, pokud je jiz otevren maximalni pocet souboru (zavisi na systemu) > adresar := currentdir(); # aktualni adresar, ve kterem pracujeme (2.1.1) > cesta := "C:\\Users\\dubcovam\\Documents\\du\\pas\\Maple\\2015_LS\\f iles\\"; (2.1.2) > currentdir(cesta); "C:\Users\dubcovam\Documents\du\pas\Maple\2015_LS\files" (2.1.3) > currentdir(); "C:\Users\dubcovam\Documents\du\pas\Maple\2015_LS\files" (2.1.4) > jmeno := "soubor1.txt"; (2.1.5)
> W1 := fopen(jmeno, WRITE); (2.1.6)
> W2 := fopen("soubor2.txt", WRITE); (2.1.7) > A := fopen("soubor3.txt", APPEND); (2.1.8) > R := fopen("soubor4.txt", READ); (2.1.9) > R2 := fopen("soubor5.txt", READ); Error, (in fopen) file or directory does not exist
fclose (soubor) - zavre soubor - zaruci, ze vsechny data jsou ulozeny na disk - pokud dany soubor nebyl otevren, tak se nic nestane - quit, done, stop - pri techto zpusobech ukonceni prace v Maple se automaticky vsechny suobory zavrou (close) > fclose(W1, W2, A,R);
Zapis dat do souboru fprintf (soubor, retezec obsahujici formatove specifikace, dosazovane hodnoty) Pozn: fprintf ma stejnou syntax jako printf , az na to, ze prvni argument je jmeno souboru, do ktereho budeme zapisovat > currentdir(); "C:\Users\dubcovam\Documents\du\pas\Maple\2015_LS\files"
(2.3.1.1)
Priklad 1: Zapiste do souboru soubor1.dat druhe mocniny cisel 1, ... , 10. > W := fopen("soubor1.txt", WRITE); (2.3.1.2) > n := 10; (2.3.1.3) > fprintf(W, "Druhe mocniny cisel 1, ... , %d: \n", n): > for i to n do fprintf(W, "%d \n", i^2) end do: > fclose(W); >
Priklad 2: Na konec souboru soubor1.dat napiste cislo ln(5). > W := fopen("soubor1.dat", APPEND); (2.3.1.4) > fprintf(W, "ln(5) = %f \n", ln(5)): > fclose(W);
Priklad 3: Zapiste do souboru soubor2.txt dva sloupce, kde v prvnim sloupci budou cisla i od 1 do 20, a v druhem sloupci budou cisla (1/2)^i.
> E := fopen("soubor2.txt", WRITE); (2.3.1.5) > for i to 20 do fprintf(E, "%d end do: > fclose(E);
% 12.8f \n", i, (1/2)^i)
writedata (soubor, data) ), seznam, seznam seznamu ... > writedata("soubor3.txt", [[1, 2, 3, 4, 5], [6, 7], [8, 9, 10]]); # radky > writedata[APPEND]("soubor3.txt", [1, 1, 1, 1, 1, 1]); # sloupec > N := matrix([[2, 3, 1], [2, 3, 4], [5, 6, 7]]); (2.3.2.1) > M := vector([1, 1, 1, 1, 1, 1]); (2.3.2.2) > writedata[APPEND]("soubor3.txt", N); > writedata[APPEND]("soubor3.txt", M);
Cteni dat ze souboru fscanf (soubor, formatove specifikace nacitavanych dat) fscanf(file,"%e %d .%d ...") %{a,b}dm vraci seznam nactenych hodnot Priklad 1: Nactete celociselne hodnoty ulozeny v souboru soubor1.dat do matice typu 3 x 6 a transponujte tuto matici. Predtim ulozte prvni dve hodnoty do promenne b. > F := fopen("soubor6.txt", READ); (2.4.1.1) > b := fscanf(F, "%d %d"); (2.4.1.2) > c:=fscanf(F,"%f"); (2.4.1.3) > a := fscanf(F, "%{3,6}dm"); (2.4.1.4)
> fclose(F); > matice := op(a); (2.4.1.5) > cislo:=op(c); (2.4.1.6) > whattype(matice); Matrix
(2.4.1.7)
> with(LinearAlgebra): > Transpose(matice);
(2.4.1.8)
Priklad 2: Zakreslete do grafu body [a,b], kde a je ulozeno v prvnim sloupci souboru soubor2.txt, b je ulozeno v druhem sloupci souboru soubor2.txt > E := fopen("soubor2.txt", READ); (2.4.1.9) > data := []; (2.4.1.10)
> while feof(E)=false do bod := fscanf(E, "%d %f \n"); data := [op(data), bod] end do;
(2.4.1.11)
> fclose(E); > data; (2.4.1.12)
> plot(data, style = point, symbolsize = 16, labels = ["a", "b"]);
>
readdata(soubor, formatove specifikace nacitavanych dat, pocet sloupcu nacitavanych dat) > data1 := readdata("soubor2.txt", [integer, float]); (2.4.2.1)
> data2 := readdata("soubor2.txt", integer, 1); (2.4.2.2) > data1; (2.4.2.3)
(2.4.2.3)
> data2; (2.4.2.4) > plot(data1, style = point, symbolsize = 16, labels = ["a", "b"]);
> > >