Kezdőoldal » Számítástechnika » Programozás » Miért nem számol a program?...

Peston kérdése:

Miért nem számol a program? Kód mellékelve. (Pascal)

Figyelt kérdés

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.)



2015. márc. 6. 14:11
 1/6 anonim ***** válasza:
Mert lokális változó értékét deklarálod, amit csak az eljárástörzsben érhetsz el. Egyébként teljesen fölösleges a tömböt megadni paraméternek, vedd ki belőle.
2015. márc. 6. 15:59
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
Nagyon szépen köszönöm, működik! :)
2015. márc. 6. 16:15
 3/6 anonim ***** válasza:
Szívesen. :) Várj még egy pillanatot, mutatok valamit, írom azonnal.
2015. márc. 6. 16:17
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

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.

2015. márc. 6. 16:26
Hasznos számodra ez a válasz?
 5/6 SimkoL ***** válasza:
Talán nézd meg az én verziómat is: [link]
2015. márc. 6. 17:18
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Megnéztem mindkettőt, óvatosan ki is merem jelenteni, hogy kezdem érteni is. Nagyon szépen köszönöm mindkettőtöknek! :)
2015. márc. 6. 22:19

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!