Matematické Fórum

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

#1 12. 02. 2011 13:53

janca361
.
Příspěvky: 3284
 

Pascal - náhodné pole malých písmen

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.


Code:

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

  • (téma jako vyřešené označil(a) gladiator01)

#2 12. 02. 2011 14:27 — Editoval hradecek (12. 02. 2011 14:28)

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: Pascal - náhodné pole malých písmen

↑ 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'


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#3 12. 02. 2011 19:06

janca361
.
Příspěvky: 3284
 

Re: Pascal - náhodné pole malých písmen

Code:

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

 

#4 12. 02. 2011 22:15

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: Pascal - náhodné pole malých písmen

Podle tohoto odkazu to je:

z pismena na cislo - ord
z cisla na pismeno - chr

(jestli jsi to mezitim sama nezjistila :-) )

Offline

 

#5 13. 02. 2011 14:40

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: Pascal - náhodné pole malých písmen

↑ janca361:
Máš dve možnosti:
1.) použiť funkciu nato určenú
2.) pretypovanie


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#6 15. 02. 2011 00:24

VojtechSejkora
Příspěvky: 176
Reputace:   
 

Re: Pascal - náhodné pole malých písmen

↑ 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

 

#7 15. 02. 2011 06:17

janca361
.
Příspěvky: 3284
 

Re: Pascal - náhodné pole malých písmen

↑ 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é.


Code:

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

Code:

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

 

#8 15. 02. 2011 11:49 — Editoval gladiator01 (15. 02. 2011 14:02)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Pascal - náhodné pole malých písmen

↑ 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?

Code:

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.

Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson