Hogy adok össze írásban C#-ban?
Tehát egy olyan program kéne ami azonos számjegyekből álló
2 számot összead az írásbeli összeadás elvével!
Delphi-ben tetszőlegesen hosszú, két pozitív egész számra:
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;
var szam1, szam2, eredmeny : string;
i, osszeg, atvitel : byte;
function egesz_szam_e(szam : string) : boolean;
var i : byte;
begin
Result := True;
for i := 1 to Length(szam) do if not (szam[i] in ['0'..'9']) then Result := False;
end;
function szamhossz( str1, str2 : string) : byte;
begin
if Length(str1) > Length(str2) then Result := Length(str1)
else
Result := Length(str2);
end;
begin
szam1 := '.';
szam2 := '.';
eredmeny := '';
atvitel := 0;
while not egesz_szam_e(szam1) do
begin
Write('Kérem az első számot: ');
ReadLn(szam1);
end;
while not egesz_szam_e(szam2) do
begin
Write('Kérem a masodik számot: ');
ReadLn(szam2);
end;
while (Length(szam1) < szamhossz(szam1, szam2)) do szam1 := '0' + szam1;
while (Length(szam2) < szamhossz(szam1, szam2)) do szam2 := '0' + szam2;
for i := szamhossz(szam1, szam2) downto 1 do
begin
osszeg := (Ord(szam1[i]) - 48) + (Ord(szam2[i]) - 48) + atvitel ;
atvitel := osszeg div 10;
eredmeny := Chr((osszeg mod 10) + 48) + eredmeny;
end;
if atvitel > 0 then eredmeny := Chr(atvitel + 48) + eredmeny;
WriteLn('Az eredmény: ', eredmeny);
ReadLn;
end.
Kommentelve, ha nem lenne érthető:
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;
var szam1, szam2, eredmeny : string;
i, osszeg, atvitel : byte;
// Függvény ami, a paraméterként kapott stringről eldönti, hogy csak számjegyeket tartalmaz-e
// Visszatérési értke Igaz, Hamis
function egesz_szam_e(szam : string) : boolean;
var i : byte;
begin
Result := True;
for i := 1 to Length(szam) do if not (szam[i] in ['0'..'9']) then Result := False;
end;
// Függvény ami megadja a hosszabb string hosszát
// Visszatérési értéke a hosszabb string hossza
function szamhossz( str1, str2 : string) : byte;
begin
if Length(str1) > Length(str2) then Result := Length(str1)
else
Result := Length(str2);
end;
begin
szam1 := '.';
szam2 := '.';
eredmeny := '';
// Az átvitel-t 0-a állíitjuk, majd később az értékek alaján változik
// először biztosan 0
atvitel := 0;
// Amíg nem egész, pozitív számot kapunk eddig ismételjük a bekérést
// A számot stringként kérjük be
while not egesz_szam_e(szam1) do
begin
Write('Kérem az első számot: ');
ReadLn(szam1);
end;
// Amíg nem egész, pozitív számot kapunk eddig ismételjük a bekérést
// A számot stringként kérjük be
while not egesz_szam_e(szam2) do
begin
Write('Kérem a masodik számot: ');
ReadLn(szam2);
end;
// Mindkét szám 'elejét' feltöltjük 0-val - nincs külön feltétel, hogy rövidebb-e
// mint a másik, szebb lenne, de nem éri meg
while (Length(szam1) < szamhossz(szam1, szam2)) do szam1 := '0' + szam1;
while (Length(szam2) < szamhossz(szam1, szam2)) do szam2 := '0' + szam2;
// Mivel már nem kell törödni a stringek hosszával ezért hátulról végig
// megyünk a számokon, az ASCII kódjuk alapján adjuk őket össze - 48 a 0 és
// így tovább
for i := szamhossz(szam1, szam2) downto 1 do
begin
osszeg := (Ord(szam1[i]) - 48) + (Ord(szam2[i]) - 48) + atvitel ;
// Az átvitel a két szám összegének egészre 'vágott' tizede
atvitel := osszeg div 10;
// Karakterré alakítjuk az értéket
eredmeny := Chr((osszeg mod 10) + 48) + eredmeny;
end;
// Ha a legvégén volt átvitel akkor hozzácsapjuk az eredmény elejéhez
if atvitel > 0 then eredmeny := Chr(atvitel + 48) + eredmeny;
WriteLn('Az eredmény: ', eredmeny);
ReadLn;
end.
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!