Hogy tudnám ezt a programot leegyszerűsíteni?
var n,f,a,max1,max2,s:integer;
v:array [1..100] of integer;
begin
assign(f,'b.txt');
reset(f);
readln(f,n);
while not eof(f) do
begin
read(f,a);
for i:=1 to n do
if a mod 10=5 then begin
v[i]:=a;
s:=s+1;
end;
end;
for i:=1 to s do
if v[i]>max1 then max1:=v[i];
for i:=1 to s do
if (v[i]>max2) and (v[i]<max1) then max2:=v[i];
writeln(max2);
writeln(max1);
end.





Értelmes változónevekkel például sokkal egyszerűbb lenne átlátni.
Egyelőre ennyit, estig nem leszek pascalos gép közelében.





Szia.
Szerintem :
Max1-nek Max2-nek adj értéket valahol, ez csak úgy eszembe jutott.
Szerintem a Max1 meghatározásához nem kell külön ciklus (mivel ez sima maximum kiválasztás) azt simán meg lehet határozni azután ahol v[i]-nek értéket adsz. (v[i]:=a;)
Mivel Max2 értékének meghatározásához kell Max1 értéke is, annak sajnos kell a külön for ciklus, ott nem tudsz egyszerűsíteni.
Sok sikert.
üdv.





További egyszerűsítést jelentene, ha létezne i változó és f fájl...
Ezenkívül ilyen esetben azért illenék valahová feltenni a b.txt fájlodat is, amelyet fel akarsz dolgozni. Gondolom, ez is a te kérdésed volt, már ott is nekem kellett egyet létrehoznom a teszteléshez:
https://www.gyakorikerdesek.hu/szamitastechnika__programozas..





Még egyszerűbb lenne, ha valami magyarázatot is fűztél volna hozzá, mert az én számomra teljesen értelmezhetetlen a szándék.
ReadLn(f, n);
while not Eof(f) do
begin
Read(f, a);
for i := 1 to n do
if a mod 10 = 5 then
begin
v[i] := a;
s := s + 1;
end;
end;
Tehát, ha sikerül követnem, mi történik:
Beolvasol a fájl elejéről egy számot az N változóba, amelynek a jelentősége előttem homályos, mindenesetre valamiféle ciklushatár. Utána végigolvasod a fájl tartalmát, és a benne talált számokkal a következőket csinálod:
1. Ellenőrzöd, hogy a szám ötre végződik-e.
2. Ha igen, a titokzatos N-ig tartó ciklusban minden egyes tömbelembe beírod ugyanezt a számot, és növelsz egy definiálatlan (vagyis a pascalban 0 kezdőértékű) S változót.
A folyamat végén a 100 elemű tömböd 1..N része a legutóbbi 5-re végződő számot tartalmazza, a többi pedig nullát. Ezek után indítasz egy vizsgálatot, amely nemcsak az N indexig beírt egyforma számokkal és a tömböd eddig figyelmen kívül hagyott, nulla értékű elemeivel akar valamit, de jó eséllyel az indexhatárt túllépve fals értékeket, illetve futási hibát eredményez.
Én a magam részéről nem tudok rájönni, hogy mi a fene akar ez lenni.





Hát... nincs mit. Szerintem ez egy értelmetlen zagyvaság, a b.txt fájl nélkül különösen az. Általános „megoldásként” bármire -- még az ostoba „eredmény” kiíratására is -- alkalmatlan, ugyanis a fájlban nagyon egyszerű olyan adatokat elhelyezni, amelyekkel garantáltan hibára fut. De akkor is hülyeség, ha kínosan ügyelsz rá, hogy az adatfájl csak megfelelő értékeket tartalmazzon. Ekkor (már az elemi hibák, pl. a hiányzó vagy hibásan definiált változók rendbe tétele után) meglátásom szerint a következő három eshetőség marad:
1. Nem volt 5-re végződő szám a fájlban, az egész tömb nullákat tartalmaz: MAX1 = 0 (mint legnagyobb talált érték), MAX2 = 0 (mint változatlan kezdőérték).
2. Egyetlen 5-re végződő szám volt, N értéke pedig éppen a V[] tömb indexhatára, vagyis 100: A tömb minden eleme ugyanazt a számot tartalmazza. MAX1 = a talált szám (mint legnagyobb talált érték), MAX2 = 0 (mint változatlan kezdőérték).
3. Talált valahány 5-re végződő számot, de S szerencsésen az indexhatáron belül maradt: A tömb első (1..N) részének minden eleme a legutóbbi megfelelő számot tartalmazza, a továbbiak nullát. MAX1 = a legutóbbi 5-re végződő szám (mint legnagyobb talált érték), MAX2 = 0 (S-től függően mint a tömb következő legnagyobb, de az előzőnél kisebb értéke, vagy mint változatlan kezdőérték).










Itt egy kísérlet valami hasonlóra, kommentezve. A program megpróbálja beolvasni a b.txt első sorában talált értéknek megfelelő N mennyiségű számot, kigyűjti az 5-re végződőket, közben megjegyzi a legnagyobbat. Ha végzett, a talált számok között megkeresi a legnagyobb, de a maximumnál kisebb értékűt:
program max_1_2;
var
i, n, a, max1, max2, s : smallint;
v :array [1..100] of integer;
f : text;
begin
Assign(f,'b.txt');
Reset(f);
ReadLn(f, n); // az első érték: ennyi számot olvasnánk be
if n > 100 then n := 100; // legfeljebb a tömb méretéig
s := 0; // a talált 5-végűek számlálója
max1 := -32768; // smallint alsó határa a Free Pascalban
i := 0; // ciklusszámláló
while not Eof(f) and (i < n) do
begin
Read(f, a); // egy szám beolvasása
if a mod 10 = 5 then // ha 5-re végződik
begin
if a > max1 then // nagyobb, mint az eddigi legnagyobb?
max1 := a; // igen, megjegyzi
Inc(s); // számláló lép
v[s] := a; // a számot beírja a tömbbe
end;
Inc(i); // a ciklusszámláló lép, hogy összevethető legyen N-nel
end;
// A legnagyobb szám benne van MAX1-ben.
// A következő keresése -- nem veszi figyelembe, ha több azonos van,
// csak az értéket nézi:
max2 := -32768; // smallint alsó határa
for i := 1 to s do // végignézi az összes feljegyzett értéket
if (v[i] > max2) and (v[i] < max1) then // ha nagyobb az előzőnél...
max2 := v[i]; // beírja
WriteLn(max2); // második legnagyobb
WriteLn(max1); // legnagyobb
end.





Megjegyzés:
Megkíséreltem az eredeti programot is kommentezni, hogy egyenként is rámutassak a hibákra, de nem jutottam a végére. Ebben a formában a követhetetlen céloknak, az óvodás szintű hibáknak és a trehányságnak olyan zavaros kutyuléka, hogy továbbra sem világos, mit kéne csinálnia pontosan, de legalább le sem fordul, és ronda. Bámulatos, hogy ilyen kis méretben micsoda bemutatót tart abból, hogyan nem szabad programot írni -- egy állatorvosi póni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!