Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Pascal - načítání

Ahojte, mám načíst N řetězců a potom u každého zjistit, zda se z každého z nich dá poskládat jeden hlavní. To mám hotové, jenom nevím, jak si zapamatovat všechny ty řetězce abych pak mohl vypsat řešení.

Příklad vstupu:

ahojky (hlavní řetězec)
5 (počet neúplných řetězců)
ahoj
aoj
axhoj
aoky
asjkb

Výstup:
ANO
ANO
NE
ANO
NE

Snad je to dost srozumitelné, jsem nováček.

Předmět Autor Datum
Keď sa nebudem zaoberať logikou skladania reťazcov a ani výstupu ako má vyzerať, potom skús ukladať…
pme 18.12.2013 21:03
pme
var k,kousek:string; i,y,m,n:integer; begin readln(k); (hlavní řetězec) readln(n); (tady načítám ř…
qui 18.12.2013 21:09
qui
Problém vidím v tomto cykle: for m:=1 to n do readln(kousek); //proste niekoľko-krát za sebou načíta…
pme 18.12.2013 21:30
pme
Jde o to že musím vypsat všechny výsledky najednou. Zadám vstupy a až potom mi mají vylézt výstupy.…
qui 18.12.2013 21:43
qui
Deklaruj si dynamické pole: type dynarray = array of string; var a: dynarray; keď už budeš vedieť…
pme 18.12.2013 22:02
pme
Máš to převrácené - z hlavního řetězce skládáš ty ostatní (podle příkladu), možná jde jen o chybu v… poslední
mnua.al 19.12.2013 01:44
mnua.al

Keď sa nebudem zaoberať logikou skladania reťazcov a ani výstupu ako má vyzerať, potom skús ukladať reťazce do poľa:

var
  MojePole: Array[1..5] of String;

prípadne sem daj kód ako to máš, lebo ja som nepochopil čoho chceš dosiahnuť...

var
k,kousek:string;
i,y,m,n:integer;

begin

readln(k); (hlavní řetězec)
readln(n); (tady načítám řetězce)
for m:=1 to n do
readln(kousek);

y:=0;
i:=0;

repeat

i:=i+1;

repeat
y:=y+1;
if (y=length(k)) and (i<>length(kousek)) then
begin
writeln('NE');
break;
end;
until (kousek[i]=k[y]);

until (length(kousek)=i) or (y=length(k));
if (length(kousek)=i) and (y<=length(k)) then
writeln('ANO'); (Vypisuju ANO nebo NE, ale takhle je to jenom pro poslední řetězec, já to potřebuju pro všechny)

readln;

end.

Problém vidím v tomto cykle:
for m:=1 to n do
readln(kousek); //proste niekoľko-krát za sebou načítavaš reťazec a nič viac

Po skončení načítavania robíš porovnanie, ale to porovnanie platí len pre posledne načítaný reťazec.
Možno by stačilo pridať:

for m:=1 to n do
begin
readln(kousek);
... /tu si porovnávaj a vypisuj výsledok
...
readln;
end;

Ak si chceš najprv načítať všetky reťazce a až následne ich testovať a vypisovať, potom to takto nepôjde...
Reťazce si musíš niekam uložiť napr. dynamické pole (nie je vopred známa veľkosť), ale neviem či ste to už preberali...
Prípadne OOP umožňuje zoznam reťazcov StringList apod. Opäť netuším čo v škole máte a s čím robíte...

Jde o to že musím vypsat všechny výsledky najednou. Zadám vstupy a až potom mi mají vylézt výstupy. Dynamická pole neznám, nemohl by jsi mi tam těch pá řádek napsat? Já jsem rád že jsem vůbec udělal to co mám.

Deklaruj si dynamické pole:

type  
   dynarray = array of string;
var
   a: dynarray;

keď už budeš vedieť veľkosť (počet prvkov poľa)> readln(n); (tady načítám řetězce),
deklaruješ jeho veľkosť:
SetLength(a,n);
následne načítavaš reťazce a ukladáš do poľa:

for m:=0 to n-1 do   //pole sa indexuje od 0
begin
  readln(kousek);
  a[m] := kousek;
end;

potom prechádzaš poľom od začiatku, testuješ a vypisuješ:

for b:= low(a) to high(a) do     //použil som premennú b, ktorú si nadefinuješ na začiatku programu, alebo použiješ svoju vlastnú...
begin
  kousek := a[b];        // do premennej kousek sa načíta reťazec z poľa a, na indexe b.
  ... tu je Tvoj hotový kód
end;

ideálne by bolo rozdeliť kód do menších častí (procedúry a funkcie), aby si mal v tom prehľad... :-)

Máš to převrácené - z hlavního řetězce skládáš ty ostatní (podle příkladu), možná jde jen o chybu v popisu.

Jinak bych zahodil Pascal(jsou z něj jen nervy a programuje se pomalu), je to už zastaralá technologie a udělal to moderně

def rozklad(w) w.split(//).uniq end
puts "Zadej hlavní"
t=gets.chomp
puts  "piš slova"
loop do   
 g=gets.chomp
 puts "%s: %s"  % [ (rozklad(g)-rozklad(t)==[])?"ano":"ne",g]
end

Hrátky s formátováním nebo záměnu testovacího řetězce za hlavní snad zvládneš.
A jestli má jít o interaktivní aplikaci nebo se slova předávají přes argumenty už je detail.

Zpět do poradny Odpovědět na původní otázku Nahoru