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 2.71828182800000000000 Digits := 21; printf("eulerovo cislo %30.20f ", ec); Eulerovo cislo 2.71828182845904523536 printf("eulerovo cislo %4.2f ", 2.7182); Eulerovo cislo 2.72 (1.2) 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" currentdir(); "C:\Users\dubcovam\Documents\du\pas\Maple\2015_LS\files" jmeno := "soubor1.txt"; (2.1.3) (2.1.4) (2.1.5) W1 := fopen(jmeno, WRITE); (2.1.6)
W2 := fopen("soubor2.txt", WRITE); A := fopen("soubor3.txt", APPEND); R := fopen("soubor4.txt", READ); R2 := fopen("soubor5.txt", READ); Error, (in fopen) file or directory does not exist (2.1.7) (2.1.8) (2.1.9) 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); n := 10; fprintf(w, "Druhe mocniny cisel 1,..., %d: \n", n): for i to n do fprintf(w, "%d \n", i^2) end do: fclose(w); (2.3.1.2) (2.3.1.3) Priklad 2: Na konec souboru soubor1.dat napiste cislo ln(5). W := fopen("soubor1.dat", APPEND); fprintf(w, "ln(5) = %f \n", ln(5)): fclose(w); (2.3.1.4) 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); for i to 20 do fprintf(e, "%d end do: fclose(e); % 12.8f \n", i, (1/2)^i) (2.3.1.5) 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]); writedata[append]("soubor3.txt", N); writedata[append]("soubor3.txt", M); (2.3.2.2) 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); b := fscanf(f, "%d %d"); c:=fscanf(f,"%f"); a := fscanf(f, "%{3,6}dm"); (2.4.1.1) (2.4.1.2) (2.4.1.3) (2.4.1.4)
fclose(f); matice := op(a); (2.4.1.5) cislo:=op(c); whattype(matice); with(linearalgebra): Transpose(matice); Matrix (2.4.1.6) (2.4.1.7) (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); data := []; (2.4.1.9) (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); data1; (2.4.2.2) (2.4.2.3)
data2; plot(data1, style = point, symbolsize = 16, labels = ["a", "b"]); (2.4.2.4)