Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Zdravím, mám úkol:
Vytvořte pole s n (20) prvky, prvky budou náhodná malá písmena. Pole rozdělate na 2 pole, kde v prvním poli budou písmena , která jsou mezi 'k' a 'r' (včetně). Pole vypište.
program pole_malych_pismen; var pole, pole1, pole2:array[1..20]of char; i,i1,i2:integer; begin randomize; i1:=1; i2:=1; for i:=1 to 20 do pole[i]:=random() (*jak načtu malé písmeno?*) for i:=1 to 20 do if pole[i]>=(*ordinální číslo k*) and pole[i]=(*ordinální číslo r*) then begin pole1[i1]:=pole[i]; i1:=i1+1; end else begin pole2[i2]:=pole[i]; i2:=i2+1; end; writeln; for i:=1 to 20 do write (pole[i], ' '); writeln; for i:=1 to (i1-1) do write (pole1[i], ' '); writeln; for i:=1 to (i2-1) do write (pole2[i], ' '); end;
Offline
↑ janca361:
"jak načtu malé písmeno?"
Využijeme poznatok z ASCII tabuľky, teda malé písmeno 'a' má v ASCII tabuľke hodnotu 97, 'b' má hodnotu 98, 'c' 97 ....až po 'z' 122.
Takto zistíš, že počet malých písmen je 25.
Teda budeme generovať 25 možných čísel.
Generovanie musí začínať od čísla 97....
takže to bude vyzerať nasledovne...random(26)+97;
Prečo ?
funkcia random(26); nám vráti náhodné číslo od 0-25
Aby sme začínali od 97 musíme iba pripočítať 97 k číslu ktoré nám vráti random();
Teda ak nám vráti 0 + 97 = 97 a to zodpovedá písmenu 'a'
ak nám vráti 25 + 97 = 122 a to zodpovedá písmenu 'z'
Offline
program pole_malych_pismen; var pole, pole1, pole2:array[1..20]of char; i,i1,i2:integer; begin randomize; i1:=1; i2:=1; for i:=1 to 20 do pole[i]:=random(26)+97; for i:=1 to 20 do if pole[i]>=107 and pole[i]<=114 then begin pole1[i1]:=pole[i]; i1:=i1+1; end else begin pole2[i2]:=pole[i]; i2:=i2+1; end; writeln; for i:=1 to 20 do write (pole[i], ' '); writeln; for i:=1 to (i1-1) do write (pole1[i], ' '); writeln; for i:=1 to (i2-1) do write (pole2[i], ' '); end.
Jak převedu čísla na písmena a obráceně? Jedno je funkce ord (netuším však které) :(
Offline
Podle tohoto odkazu to je:
z pismena na cislo - ord
z cisla na pismeno - chr
(jestli jsi to mezitim sama nezjistila :-) )
Offline
↑ janca361:
Máš dve možnosti:
1.) použiť funkciu nato určenú
2.) pretypovanie
Offline
↑ Lumikodlak:
tak nejjisstější asi bude mít kdby to napsal cca takto
random(26)+(int)'a';
a má to na 100%správně:D počet malých písmen je určitě všude stejný
akorýát nevím jestli se takto přetipovává v pascalu nebo v čem to vlastně chce psát:D
Offline
↑ Lumikodlak:
Musím se přiznat, že jsem ani nehledala ;)
↑ hradecek: ↑ VojtechSejkora:
Nevím, co je to přetypování. To slovo slyším poprvé.
program pole_malych_pismen; var pole, pole1, pole2:array[1..20]of integer; i,i1,i2:integer; begin randomize; i1:=1; i2:=1; for i:=1 to 20 do pole[i]:=random(26)+97; for i:=1 to 20 do if pole[i]>=107 and pole[i]<=114 then begin pole1[i1]:=pole[i]; i1:=i1+1; end else begin pole2[i2]:=pole[i]; i2:=i2+1; end; writeln; for i:=1 to 20 do write (pole[chr(i)], ' '); writeln; for i:=1 to (i1-1) do write (pole1[chr(i)], ' '); writeln; for i:=1 to (i2-1) do write (pole2[chr(i)], ' '); end.
-V poli akoát nejsou znaky, ale jejich ordinální čísla
program pole_malych_pismen; var pole, pole1, pole2:array[1..20]of char; i,i1,i2:integer; begin randomize; i1:=1; i2:=1; for i:=1 to 20 do pole[i]:=chr(random(26)+97); for i:=1 to 20 do if pole[i]>=ord(107) and pole[i]<=ord(114) then begin pole1[i1]:=pole[i]; i1:=i1+1; end else begin pole2[i2]:=pole[i]; i2:=i2+1; end; writeln; for i:=1 to 20 do write (pole[i], ' '); writeln; for i:=1 to (i1-1) do write (pole1[i], ' '); writeln; for i:=1 to (i2-1) do write (pole2[i], ' '); end.
Je to správně? Pascal se se mnou odmítá bavit :(
Offline
↑ janca361:
Když deklaruješ proměnnou tak uvádíš nějaký datový typ - např. char, integer,... Pokud chceš tento datový typ v průběhu programu změnit, tak proměnnou tzv. přetypuješ např. jak píše Vojtech ze znaku na integer - po změně na číslo dostanu jeho ascii hodnotu.
Např.
a :Integer;
s :Char;
s:='a';
a:=Integer(s);
Chtělo byto číst co ti píše compilátor za chybové hlášení.
Když máš víc příkazů u for, if apod. tak by jsi asi měla psát begin a end (nevim jak to je u pascalu, ale u jiných jazyků kdybych nenapsala závorky, tak se veme jenom první přikaz, který za např. for následuje).
Když máš if (pole[i] >= 107) and (pole[i] <= 114) , tak musí být jednotlivé části v závorkách, jinak mi to hlásilo chybu.
Jestli říkám blbosti, tak se omlouvám pascal jsem se nikdy neučila.
Nějak takhle by to mohlo být?
PROGRAM pole_malych_pismen; USES crt; var pole :array[1..20] of Integer; pole1, pole2:array[1..20] of char; i,i1,i2:integer; begin randomize; i1:=1; i2:=1; for i:=1 to 20 do pole[i]:=(random(26)+97); for i:=1 to 20 do begin if (pole[i] >= 107) and (pole[i] <= 114) then begin pole1[i1]:=chr(pole[i]); i1:=i1+1 end else begin pole2[i2]:=chr(pole[i]); i2:=i2+1; end; end; writeln; for i:=1 to 20 do write (chr(pole[i]), ' '); writeln; for i:=1 to (i1-1) do write (pole1[i], ' '); writeln; for i:=1 to (i2-1) do write (pole2[i], ' '); readln; end.
Offline
Stránky: 1