Kezdőoldal » Számítástechnika » Programozás » Hogyan kell ezt a feladatot...

Hogyan kell ezt a feladatot megoldani Free Pascalban?

Figyelt kérdés

Készítsen eljárást, amelyik egy vektor adott elemét megcseréli az utána következővel! (Használjon közbenső változókat!)

Előre is köszönöm! :)


2015. júl. 24. 20:35
1 2
 1/20 ejbenjaro ***** válasza:
Ez itt a gyakori kérdések, nem pedig a házi feladat megoldó fórum. Légy kedves leírni, hogy meddig jutottál el.
2015. júl. 24. 20:57
Hasznos számodra ez a válasz?
 2/20 A kérdező kommentje:
Semeddig, mert nem tudom elkezdni...
2015. júl. 24. 21:03
 3/20 ejbenjaro ***** válasza:

A vektor az egy tömb. Ennek kell két egymást követő elemét megcserélni.


Eljárás Csere(v:vektor ; index:egész);

segédváltozók:

x: egész


x:=v[index];

v[index]:=v[index+1];

v[index+1]:=x;

eljárás vége


Hát valami ilyesmi lehet. Csak le kell programozni. A cserénél figyelni kell, hogy ha a tömb legmagasabb indexe kerül megadásra, tehát a vektor utolsó eleme, akkor mi történik. Erre nincsen felkészítve a fentebbi vázlat.

2015. júl. 24. 21:12
Hasznos számodra ez a válasz?
 4/20 A kérdező kommentje:

Én így oldottam meg, de addig megy, hogy beolvassa az "a" változót. Nagyon kezdő vagyok még, mit rontottam el és miért nem jó úgy? :) (bocs a writeln-ekben lévő ékezetek miatt, csak így tudtam txt-vé átalakítani, de annak most gondolom nincs jelentősége :))


Uses crt;

var v: array[1..5] of integer;


Procedure adatbekeres;

Var i:integer;

Begin

Writeln('Add meg a vektor els‹ 5 elem‚t!');

for i:=1 to 5 do

Begin

Writeln('A(z) ',i,'. elem: ');

Readln(v[i]);

End;

Writeln('Akkor a te elemeid: ');

for i:=1 to 5 do

Write(v[i],', ');

End;


Procedure csere;

Var a,j:integer;

Label ujra;

Begin

ujra:

Writeln('H nyadik elemet cser‚ljem meg a k”vetkez‹vel?');

Readln(a);

If (a<1) or (a>4) then goto ujra

else

begin

Readln(a);

v[a]:=v[a+1];

v[a+1]:=v[a];

end;

Writeln('Akkor az Łj sorrend: ');

For j:=1 to 5 do

Write(v[j],', ');

End;


BEGIN

ClrScr;

Adatbekeres;

Readln;

csere;

Readln;

END.

2015. júl. 24. 21:27
 5/20 A kérdező kommentje:
Először csak maga az átgondolás nem ment (rájöttem, hogy nem általános, hanem csak egy konkrét vektort kell vizsgálni), de az már ok, most már csak magával a progival van gond, utána meg majd olyat kéne, hogy tetszőleges 2 elemet cserélek meg, utána meg, hogy egy n elemű vektor tetszőleges 2 elemét cserélem meg. Vagy ez kezdőnek még túl necces? :)
2015. júl. 24. 21:30
 6/20 ejbenjaro ***** válasza:

Kijavítottam:


program cserebere;


Uses crt;

var v: array[1..5] of integer;


Procedure adatbekeres;

Var i:integer;

Begin

Writeln('Add meg a vektor első 5 elemét!');


for i:=1 to 5 do

Begin

Write('A(z) ',i,'. elem: ');

Readln(v[i]);

End;


Writeln('Akkor a te elemeid: ');

for i:=1 to 5 do

Write(v[i],', ');

writeln;

End;


Procedure csere;

Var a,x,j:integer;


Begin


repeat

clrscr;

Write('Hányadik elemet cseréljem meg a következővel?: ');

Readln(a);

until a in [1..4];


x:=v[a];

v[a]:=v[a+1];

v[a+1]:=x;


Writeln('Akkor az új sorrend: ');

For j:=1 to 5 do

Write(v[j],', ');

writeln;

End;


BEGIN

ClrScr;

Adatbekeres;

writeln('A folytatáshoz nyomj ENTER-t!');

Readln;

csere;

writeln('A kilépéshez nyomj ENTER-t!');

Readln;

END.

2015. júl. 24. 21:37
Hasznos számodra ez a válasz?
 7/20 ejbenjaro ***** válasza:

„utána meg majd olyat kéne, hogy tetszőleges 2 elemet cserélek meg, utána meg, hogy egy n elemű vektor tetszőleges 2 elemét cserélem meg. Vagy ez kezdőnek még túl necces? :)”


Az elv ugyan ez. Tök mindegy, hogy mekkora a vektor. De ha a cserélgetést akarod gyakorolni, akkor pl egy véletlen számokkal feltöltött vektor elemeit rakd növekvő/csökkenő sorrendbe.

2015. júl. 24. 21:40
Hasznos számodra ez a válasz?
 8/20 A kérdező kommentje:
Köszönöm szépem, még annyi lenne akkor a kérdésem, hogy mi annak az oka, hogy kell egy x változó és miért nem jó ilyen esetben ez a feltételes ugrás? most már látom, hogy jobb ezzel a hátultesztelős ciklussal, csak szeretném tudni miért nem jó a számlálós, hogy máskor ne essek ebbe a hibába :)
2015. júl. 24. 22:39
 9/20 A kérdező kommentje:
Óh, sikerült a számlálóssal is, csak éppen én az else után is tettem egy readln-t, ezért a hiba :D ezer hála, nagyon jó, hogy így kijavítottad a programot, az x-et kapiskálom, hogy miért kell, de azért egy pontos magyarázatra még rászorulok. :)
2015. júl. 24. 22:44
 10/20 tabaki ***** válasza:

Még az eredeti kérdésre egy variáció:


program dinnye;

uses crt;


const

SZOHOSSZMAX = 11;

TOMBHOSSZMAX = 7;


var

betu : char;

szam, csereindex : byte;

csere : string[SZOHOSSZMAX];

tomb : array[1..TOMBHOSSZMAX] of string[SZOHOSSZMAX] =

('elment','apád','dinnyét','lopni','elfelejtett','zsákot','vinni');


BEGIN

ClrScr;

GotoXY(13,3);

Write('Hányadik elemet cseréled a következővel? (0 = Kilépes)');

repeat

        GotoXY(15,10);

        for szam := 1 to TOMBHOSSZMAX do Write(tomb[szam], ' ');

        GotoXY(39,4);

        repeat

                betu := ReadKey;

                szam := Ord(betu)-48;

        until szam in[ 0..TOMBHOSSZMAX];

        Write(szam);

        if szam > 0 then

                if szam < TOMBHOSSZMAX then

                        csereindex := szam + 1

                else

                        csereindex := 1;

        csere := tomb[szam];

        tomb[szam] := tomb[csereindex];

        tomb[csereindex] := csere;

until szam < 1;

ClrScr;

END.

2015. júl. 24. 23:05
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!