Pascalban a kvetkező programot kellene megoldani?
Az ASZTAL szóból szópiramist a következő módon
A
AS
ASZ
ASZT
ASZTA
ASZTAL
ASZTA
ASZT
ASZ
AS
A
• Kérjen be egy szót.
• Írja ki a szó hosszát.
• Végezze el a feladatot (hozza létre a piramist).
a segítséget előre is köszönöm!
Valóban meg kéne, legalábbis gondolom, ezért írtad ki (ezzel technikailag a kérdésedre válaszoltam).
Hol akadtál el, melyik rész nem megy? Bekérés? Kiírás? A piramis létrehozása?
Bár szerintem elég szájbarágósan le van írva a feladat, azért elmondom, én hogy írnám ki a piramist (minden más teljesen egyértelmű):
Miután bekértem a stringet, egy for ciklusban kiíratnám először az első betűjét, majd az első kettőt, majd az első hármat stb. A ciklust nyilván a szó hosszáig futtatnám (vagy eggyel kevesebbig, kapásból nem tudom, a Pascal 0-tól vagy 1-től indexel-e). Majd egy második ciklussal kiíratnám az első (hossz-1) karaktert, majd az első (hossz-2)-t, egészen az első (hossz-(hossz-1)) = 1 karakterig.
A kiíráshoz valszeg elég sok lehetőség ban, a dokumentáció gyors fellapozása alapján a LeftStr függvényt javasolnám.
Persze messze nem ez az egyetlen, és valószínűleg nem is a leghatákonyabb módszer, de elvégzi a feladatot, és ez jelen esetben (mivel felteszem, iskolai vagy érettségi feladat volna) úgy gondolom, elegendő.
Ez alapján meg kéne tudd írni. Ne várd el ezen a fórumon (meg bármely más prog. fórumon sem) senkitől, hogy az egészet megírja helyetted, mert az eléggé szembemegy a programozás mentalitásával.
var s : String;
i : Byte;
begin
Write('Kérem a szót: ');
ReadLn(s);
for i := 1 to Length(s) do WriteLn(Copy(s, 1, i));
for i := Length(s) - 1 downto 1 do WriteLn(Copy(s, 1, i));
ReadLn;
end.
Nagyjából ezt akartam írni én is, csak elhúztam az időt azzal, hogy egy kódmegosztó oldalt keressek, amit javasolhatok a programod idemásolása helyett (a GyK ugyanis elrontja a behúzásokat). Sajna, így hirtelenjében nem találtam igazán egyszerű kezelésűt, ha valaki tud, ajánljon jobbat:
A stringek karakterei egyenként indexelhetők (pl. szo[3], ha a szo stringben az 'ASZTAL' van, a 'Z' karaktert jelenti), ennek az alapján egymásba ágyazott ciklusokkal is megoldhatod StrLeft() helyett.
Na mindegy, jobban jártál volna egy kis gondolkodással, de ha már SimkoL ellőtte a poént, közlöm az én változatomat is (ékezeteket nem tud):
var x, y : byte; szo : string;
begin
Write('Kerem a szot: '); Readln(szo);
for y := 1 to Length(szo) do
begin
for x := 1 to y do Write(szo[x]);
WriteLn;
end;
repeat
Dec(y);
for x := 1 to y do Write(szo[x]);
WriteLn;
until y < 2;
end.
Futtatás:
Kerem a szot: MEDVEKALAND
M
ME
MED
MEDV
MEDVE
MEDVEK
MEDVEKA
MEDVEKAL
MEDVEKALA
MEDVEKALAN
MEDVEKALAND
MEDVEKALAN
MEDVEKALA
MEDVEKAL
MEDVEKA
MEDVEK
MEDVE
MEDV
MED
ME
M
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!