Miért nem számol a program? Kód mellékelve. (Pascal)
Egy mezei egyszerű megszámlálással is problémák akadtak. A kódot lefordítva még egy warning üzenet is jön, amitől lefut ugyan, de a megszámlálás végeredménye mindig 0, mintha nem venné figyelembe a feltételt, vagy nem töltené fel a tömbömet megfelelően a program. Hol találom a hibát, kérlek segítsetek!
A kód:
program beadando;
uses crt;
const MaxN=100;
type
meres=Array [1..MaxN] of integer;
var
N:integer;
mm: meres;
//Beolvas
Procedure beolvas(var N:integer; mm:meres);
Var
i: integer;
Begin
writeln('Add meg a darabszamot!');
readln(N);
for i:=1 to N do begin
write('Add meg a(z) ',i,'. árvízállást: ');
readln(mm[i]);
end;
end;
//1. feladat
Procedure arviz(const N: integer; mm: meres);
var i,K: integer;
Begin
K:=0;
for i:=1 to N do begin
if (mm[i] > 800) then
K:=K+1;
end;
writeln('Az összes árvíz száma: ',K);
end;
Begin
clrscr;
beolvas(N,mm);
arviz(N,mm);
End.
A warning: beadando.pas(36,14) Warning: Variable "mm" does not seem to be initialized (beolvas(N,mm); ez a sor a 36.)
Szóval helyesen úgy tudsz megadni paraméterként egy módosítandó külső változót - amit eredetileg próbáltál -, hogy a memóriacímével hivatkozol rá.
const MaxN=100;
type
meres=Array [1..MaxN] of integer;
var
mm: meres;
procedure teszt(var ptr: meres);
begin
ptr[index] := ertek;
...
end;
begin
teszt(mm);
end.
Ha az eljárás névtere után a paramétereknél megadod a var kulcsszót, pointer-t vár, azonban az arviz() eljárásnál nem adtad meg például, tehát lokális változóként deklarálta az mm-et.
Plusz infó: egy változó memóriacímét pedig így éred el, pl. az mm esetében: @mm.
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!