Pascal programkód hiba, valaki ráér?
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.
31. és 34. sor helyesen:
31. until t[a].s='Eric';
34. if t[a].s='Eric' then b:=a;
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.
'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 ?
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):)
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.
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.
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.
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!