Kezdőoldal » Számítástechnika » Programozás » Hogy adok össze írásban C#-ban?

Hogy adok össze írásban C#-ban?

Figyelt kérdés

Tehát egy olyan program kéne ami azonos számjegyekből álló

2 számot összead az írásbeli összeadás elvével!



2016. jan. 10. 10:17
1 2
 11/12 SimkoL ***** válasza:

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.

2016. jan. 10. 15:07
Hasznos számodra ez a válasz?
 12/12 SimkoL ***** válasza:

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.

2016. jan. 10. 16:14
Hasznos számodra ez a válasz?
1 2

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!