Prog.Hu

Két szám közötti négyzetszámok probléma

Keresés
Hírlevél

Két szám közötti négyzetszámok

2013-09-08T21:26+02:00
Neovaki
NeovakiProg.Hu
regisztrált tag
nyitotta: Neovaki, idő: 2008.09.27. 16:51, moderátor: netangel, megoldás elfogadva: 2008.09.27. 18:39
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben

Kategóriák:Programozási nyelvek » Pascal

Sorrend:
Időzóna:
Oldalanként:
Oszd meg!
Sziasztok,



Ez a program a beírt 2 szám közötti négyzetszámokat kellene, hogy kiírja, de sajnos nem működik és nem tudom, hogy hol lehet a hiba. Segítenétek?

A turbo pascal ebben a sorban: i:= (ettol to eddig); ír hibát: "Error 89: ")" expected.

PROGRAM negyzetszamok;
USES Crt;

Var
   ettol, eddig, i: word;


BEGIN
     ClrScr;

WriteLn ('Melyik szamtol?');
Read (ettol);

WriteLn ('Melyik szamig?');
Read (eddig);

i:= (ettol to eddig);

While ettol<= eddig Do
BEGIN
WriteLn (i:4, sqr(i):6);

i:=i+1;
End;
Readkey;
End.


Nagyon köszönöm előre is.
A hatos szerepe, hogy megadja hány karakteren jelenjen meg a kiírandó szám.

pl:
writeln(i:6:2);

azt jelenti, hogy 6 karakter hosszú lesz a szám, és ebből 2 a tizedesjegyek lesznek. Tehát a :4 és :6 -nak semmi köze a lényegi megoldáshoz.

Ráadásul a
WriteLn (ettol:4, sqr(ettol):6);

minden számot kiír. nem csak a négyzetszámokat! Ráadásul minden számnak a négyzetét. Nem mondja meg róla, hogy négyzetszám-e.

A helyes megoldást az én hozzászólásomban láthatod. előzmény

Ezt az "(ettol to eddig)" formulát honnan szedted???

A "While ettol<=eddig Do"... is végtelen ciklus lesz, hiszen az eddig mindig nagyobb marad az ettolnel (kiveve, ha nem így írták be)! Helyesen: "for i:=ettol to eddig do"... előzmény
PROGRAM negyzetszamok;
USES Crt;

Var
   ettol, eddig:word;


BEGIN
     ClrScr;

WriteLn ('Melyik szamtol?');
Read (ettol);

WriteLn ('Melyik szamig?');
Read (eddig);

While ettol<= eddig Do
BEGIN
WriteLn (ettol:4, sqr(ettol):6);

ettol:=ettol+1;
End;
Readkey;
End.
előzmény
Ha már teljes kódot írsz:

Writeln(ettol:4, sqr(ettol):6);

ok, látom javítottál

de FOR ciklus akkor is helyesebb lenne!!! előzmény
Oh, nagyon köszönöm a szuper gyors válaszokat. De most mégis kinek adjam a pontot? :(


polyJoe, azt az "ettol eddig" formulát info tanár írta egy másik program kapcsán és abból próbáltam meg megcsinálni ezt a programot. (eddig összesen volt 2 pascalos info órám)


Ezt a részt itt nem teljesen értem:

WriteLn (ettol:4, sqr(ettol):6);

ettol:=ettol+1;

El tudnád magyarázni, hogy pontosan mi mit jelent? Például mi az az sqr(ettol):6? előzmény
Először kiírja az ettol változó értékét és utána az ettol változó értékének a négyzetét. Utána hozzáad az ettolhöz egyet (, hogy a következő alkalommal, ne ugyanezt ismételje) és újraindul a ciklus.
Én nem ragaszkodom amúgy a ponthoz. előzmény
A ciklust így kellene megírni:

  writeln('Negyzetszamok:');
  for i := ettol to eddig do begin
    if (trunc(sqrt(i)) = sqrt(i)) then begin
      writeln(i);
    end;
  end;

Az if utasítás megnézi, hogy a szám gyöke megegyezik-e a szám gyökének a lekerekített értékével, ha igen, akkor négyzetszámról van szó. előzmény
Köszönöm, most már végképp nem tudom, hogy kinek adjam a pontot.


Még ez a sor nem világos:

WriteLn (ettol:4, sqr(ettol):6);


ettol:4 - ez azt jelenti, hogy az ettől az mindenképpen 4 lesz, mivel az az első négyzetszám?

sqr(ettol):6 - ez se világos. Ugye az sqr(ettol) az megmondja az "ettol" négyzetét. De utána miért kell az a 6-os? előzmény
De utána miért kell az a 6-os?

Próbáld ki vele is meg nélküle is és megtudod... előzmény
6 nélkül nem azt írja ki, amit kell. De még mindig nem teljesen világos, hogy mi a 6-os szerepe. előzmény
És ha kicseréled a 6-ost pl. 16-osra? előzmény
A hatos szerepe, hogy megadja hány karakteren jelenjen meg a kiírandó szám.

pl:
writeln(i:6:2);

azt jelenti, hogy 6 karakter hosszú lesz a szám, és ebből 2 a tizedesjegyek lesznek. Tehát a :4 és :6 -nak semmi köze a lényegi megoldáshoz.

Ráadásul a
WriteLn (ettol:4, sqr(ettol):6);

minden számot kiír. nem csak a négyzetszámokat! Ráadásul minden számnak a négyzetét. Nem mondja meg róla, hogy négyzetszám-e.

A helyes megoldást az én hozzászólásomban láthatod. előzmény
Nagyon szépen köszönöm a kerek egész magyarázatot, így már értem az egészet. Köszönöm. előzmény
Akkor, hogy néz ki a programod végleges verziója? előzmény
PROGRAM negyzetszamok;
USES Crt;

Var
   ettol, eddig, index:word;


BEGIN
     ClrScr;

WriteLn ('Melyik szamtol?');
Read (ettol);

WriteLn ('Melyik szamig?');
Read (eddig);

  writeln('Negyzetszamok:');
  for index := ettol to eddig do begin
    if (trunc(sqrt(index)) = sqrt(index)) then begin
      writeln(index);
    end;
  end;

ettol:=ettol+1;
Readkey;
End.
előzmény
OK!

Viszont:

ettol:=ettol+1;

felesleges. Mit akarsz ettől az ettol valtozótól még ott a program végén? előzmény
Oh, tényleg! Köszönöm.

Az sqrt és az sqr között mi a különbség? előzmény
Nézd meg a súgóban! előzmény
Továbbá jó lenne, ha valamiféle egységes stílust kitalálnál a program írásakor.

Néhány kulcsszót tisztán nagy betűvel írsz néhányat pedig nagy kezdőbetűvel. pl. PROGRAM , Var

Aztán néha nagybetűvel kezded a függvényt aztán pedig kisbetűvel.
pl: WriteLn , writeln

Továbbá a sorok előtti space karakterek száma is össze-vissza jelentkezik.

Én valahogy így írtam vona meg a programot:

program negyzetszamok;

uses
  crt;

var
  ettol, eddig, index : word;

begin
  clrScr;

  writeln('Melyik szamtol?');
  read(ettol);

  writeln('Melyik szamig?');
  read(eddig);

  writeln('Negyzetszamok:');
  for index := ettol to eddig do begin
    if (trunc(sqrt(index)) = sqrt(index)) then begin
      writeln(index);
    end;
  end;

  readln;
end.
előzmény
sqrt : négyzetgyökvonás
sqr : négyzetre emelés előzmény
Köszönöm, így tényleg átláthatóbb, majd igyekezni fogok, hogy rendezettek legyenek a kódjaim. Azt hiszem én maradok annál a változatnál, hogy minden kulcsszó nagybetű.

Köszönök mindent. előzmény
Oszd meg másokkal is!