Kezdőoldal » Számítástechnika » Programozás » Pascal programkód hiba,...

Pascal programkód hiba, valaki ráér?

Figyelt kérdés

Nem kell megijedni, nem kell átnézni a forráskódot, csak arra lennék kíváncsi, hogy a j:=j+t[i].p; sor miért nem működik. A program felépül, aztán Sigsevvel leáll emiatt a sor miatt.


Illetve, hogy ha egy stringet keresünk iffel, akkor ha csak a string első pár betűjét írjuk be, akkor is megadja a találatot?


program project1;

type

q=record

p:integer;

m:integer;

s:string[50]

end;

tomb=array[1..1000] of q;

var

t:tomb;

i,j,k,l,w,d,a,b:integer;

f:text;

begin

assign(f,'musor.txt');

reset(f);

readln(f,d);


for i:=1 to d do begin

readln(f,t[i].p,t[i].m,t[i].s);

end;

close(f);

l:=0;

k:=0;

w:=0;

j:=0;

i:=1;

repeat

j:=j+t[i].p;

k:=k+t[i].m;

inc(i);

until t[a].s[1]='Eric';



for a:=1 to d do begin

if t[a].s[1]='Eric' then b:=a;

end;


for a:=1 to b do begin

w:=w+t[a].p;

l:=l+t[a].m;

end;


writeln(((w*60+l)-(j*60+k)) div 3600,' ora ', (((w*60+l)-(j*60+k)) mod 3600) div 60, ' perc ',((((w*60+l)-(j*60+k)) mod 3600) mod 60));


readkey;

end.



Ha valaki esetleg kipróbálná (reménykedek), annak itt a musor.txt tartalma:


4

4 23 Deep Purple:Bad Attitude

3 56 Eric Clapton:Hold Me Lord

2 12 Frank Zappa:Pick Me, I'm Clean

6 43 Eric Clapton:Last Fair Deal Gone Down


txt vege

A programnak azt kellene kiírnia, hogy: 0 ora 12 perc 51 masodperc


Feladat: első szám a dalok száma, második az időtartamuk percben, harmadik adat a szám címe. Feladat: mennyi idő telt el az első Eric Clapton szám eleje és az utolsó Eric Clapton szám vége között.


Előre is köszi a segítséget.



2015. máj. 8. 16:40
1 2
 1/11 A kérdező kommentje:

31. és 34. sor helyesen:

31. until t[a].s='Eric';

34. if t[a].s='Eric' then b:=a;

2015. máj. 8. 16:44
 2/11 anonim ***** válasza:

Szerintem túlindexeled a tömböt a repeat-until ciklusban.

Az »until t[a].s='Eric'« sorral több problémám is van.. egyrészt nem látom, hogy 'a' hol kap értéket, másrészt a 't[a].s' a teljes stringet adja vissza, ez pedig ugye sosem lesz egyenlő 'Eric'-kel. Már csak emiatt is túlfut a ciklus.

2015. máj. 8. 17:02
Hasznos számodra ez a válasz?
 3/11 SimkoL ***** válasza:

'Illetve, hogy ha egy stringet keresünk iffel, akkor ha csak a string első pár betűjét írjuk be, akkor is megadja a találatot? ' Nem ! Erre esetleg a Pos használható ha nagyon alapszinten maradunk.

Házi vagy szórakozás ?

2015. máj. 8. 17:20
Hasznos számodra ez a válasz?
 4/11 A kérdező kommentje:

Köszi akkor a második probléma megoldódott.


De az elsőt még nem értem. Az a ciklusváltozó, hogyne lenne értéke? (Egyébként házi, de élvezem (amikor megbírom csinálni):)

2015. máj. 8. 17:31
 5/11 anonim ***** válasza:
Nézd meg jobban.. az 'a' változó hol kap értéket először?..
2015. máj. 8. 17:36
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:

Upsz, átfutott rajta a szemem...


Kipróbáltam de az until-os sorral még baja van.

Itt a javított verzió:


program project1;

type

q=record

p:integer;

m:integer;

s:string[50]

end;

tomb=array[1..1000] of q;

var

t:tomb;

i,j,k,l,w,d,a,b:integer;

f:text;

begin

assign(f,'musor.txt');

reset(f);

readln(f,d);


for i:=1 to d do begin

readln(f, t[i].p,t[i].m,t[i].s);

end;

close(f);

l:=0;

k:=0;

w:=0;

j:=0;

i:=1;

repeat

j:=j+t[i].p;

k:=k+t[i].m;

inc(i);

until (t[i].s[1]='E') and (t[i].s[2]='r');


for a:=1 to d do begin

if (t[a].s[1]='E') and (t[a].s[2]='r') then b:=a;

end;


for a:=1 to b do begin

w:=w+t[a].p;

l:=l+t[a].m;

end;


writeln(((w*60+l)-(j*60+k)) div 3600,' ora ', (((w*60+l)-(j*60+k)) mod 3600) div 60, ' perc ',((((w*60+l)-(j*60+k)) mod 3600) mod 60));


readkey;

end.

2015. máj. 8. 17:50
 7/11 SimkoL ***** válasza:

Mutatok egy másik megközelítést:


program Eric_Clapton;


type

zeneszamok = record

perc: integer;

masodperc: integer;

cim: string[50];

end;


var

tomb : array of zeneszamok;

i, darab, perc, mp, osszmp : integer;

f: Text;


function first : integer;

var n : integer;

begin

n := -1;

while n < darab do

begin

Inc(n);

if Pos('Eric', tomb[n].cim) > 0 then

begin

Result := n;

Exit;

end;

end;

end;


function last : integer;

var n : integer;

begin

n := darab;

while n > 1 do

begin

Dec(n);

if Pos('Eric', tomb[n].cim) > 0 then

begin

Result := n;

Exit;

end;

end;

end;


begin

Assign(f, 'musor.txt');

Reset(f);

ReadLn(f, darab);

SetLength(tomb, darab);

for i := 0 to darab - 1 do

begin

ReadLn(f, tomb[i].perc, tomb[i].masodperc, tomb[i].cim);

end;

Close(f);

perc := 0;

mp := 0;

for i := first to last do

begin

Inc(perc, tomb[i].perc);

Inc(mp, tomb[i].masodperc);

end;

osszmp := perc * 60 + mp;

WriteLn(osszmp div 3600:2, ' ora ', ((osszmp mod 3600) div 60):2, ' perc ', (osszmp mod 60):2, ' mp');

SetLength(tomb, 0);

ReadLn;

end.


Hibakezelés nincs, azt már rád bízom.

2015. máj. 8. 18:34
Hasznos számodra ez a válasz?
 8/11 A kérdező kommentje:
Köszi, a te megoldásodon haladok tovább, bár az új függvények miatt kicsit feltűnő, h nem az enyém. Annyi baj legyen, a tanárnőnek majd azt mondom, hogy önszorgalomból új függvényeket keresgélek a neten.
2015. máj. 8. 19:01
 9/11 SimkoL ***** válasza:
Ha netalántán valamit nem értesz szívesen elmagyarázom, nincs benne újdonságként csak a dinamikus tömb.
2015. máj. 8. 19:10
Hasznos számodra ez a válasz?
 10/11 A kérdező kommentje:

Ma olt időm értelmezni a megoldásodat és nagyon tetszik egy olyan kérdésem lenne, h. miért 0-ról indítod a for ciklusaidat?

Így pl. lesz 0. zeneszám, ami ha pl. szövegben kell kiíratni, akkor bután hangzik, ráadásul külön figyelned kell, h a darab-1-et ne felejtsd le.

2015. máj. 9. 18:40
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!