Hogyan kell, olyan programot írni, pacalban, amely átvált egy háromjegyű számot hatos számrendszerből kettes számrendszerbe?
Így reggelről tényleg megéheztem pacalra.
Viccet félretéve:
Nem 16-os számrendszerből kell kettesbe?
Van egy programom, ami hasonló. Abba 2-es 8-as 16-os számrendszer között lehet váltani, s te választhatod ki, hogy mit csináljon a program, szóval kicsit bonyolult, ha kell elküldhetem skypeon, mert hosszú.
Akkor kanyarodjunk vissza az alapokra:
Hogyan váltasz át számrendszerek között? Vagy hogyan választ át egy számot hatosból 10-esben, majd tízesből kettesbe?
Elsőnek ezt írd le, és akkor haladunk tovább a feladattal :)
@Sir Butcher:
Szívemből beszélsz. Egy ilyen feladatban meg kell érteni az alapokat és kész.
@#2:
Persze, a kettes/nyolcas/tizenhatos átváltás az speciális eset, ezért problémátlan, de nehogy már azonnal tévedést gyanítsunk, ha gondolkodni is kell. Miért ne lehetne tényleg hatos az a számrendszer?
@hubuk:
Írd le, hogy papíron hogyan csinálod meg ugyanezt az átváltást, segítünk lekódolni.
Megcsináltattad mással, mi? :)
G.
Először is leszögezem nem én írtam meg neki sunyiban :)
Írtam egy szösszenetet 2..16 számrendszerek közötti átváltásra, bővíthető csak át kell írni, igaz nagy értelmét nem látom.
program szamrendszer;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, Math;
var
jegyek : array[0..15] of char;
tomb : set of char;
alap, alap1, hiba, i : integer;
s_alap, s_alap1, valtando : string;
procedure Feltoltes;
var i : byte;
begin
for i := 0 to 9 do jegyek[i] := chr(48 + i);
for i := 10 to 15 do jegyek[i] := chr(55 + i);
end;
function Tizesre(szamrendszer : byte; szam : string) : int64;
var i, hossz, ertek : byte;
begin
Result := 0;
tomb := [];
szam := UpCase(szam);
hossz := Length(szam);
for i := hossz downto 1 do
begin
ertek := Ord(szam[i]) - 48;
if Ord(szam[i]) > 64 then ertek := Ord(szam[i]) - 55;
Result := Result + Trunc(ertek * (Power(szamrendszer, hossz - i)));
end;
end;
function Melyikre(szamrendszer : byte; szam : int64) : string;
var i, vm : byte;
verem : array of byte;
begin
if szam = 0 then Exit;
Result := '';
SetLength(verem, 0);
while szam <> 0 do
begin
vm := Length(verem);
SetLength(verem, vm + 1);
verem[vm] := szam mod szamrendszer;
szam := szam div szamrendszer;
end;
for i := Length(verem) - 1 downto 0 do
Result := Result + jegyek[verem[i]];
SetLength(verem, 0);
end;
begin
Feltoltes;
hiba := -1;
while hiba <> 0 do
begin
Write('Kerem az atvaltando szamrendszer alapjat: ');
ReadLn(s_alap);
Val(s_alap, alap, hiba);
if not (alap in [2..16]) then
begin
WriteLn('Csak 2..16 kozotti ertek hasznalhato');
hiba := -1;
end;
end;
hiba := -1;
while hiba <> 0 do
begin
Write('Melyik szamrendszerre valtsuk: ');
ReadLn(s_alap1);
Val(s_alap1, alap1, hiba);
if not (alap1 in [2..16]) then
begin
WriteLn('Csak 2..16 kozotti ertek hasznalhato');
hiba := -1;
end;
end;
tomb := [];
for i := 0 to alap - 1 do tomb := tomb + [jegyek[i]];
hiba := -1;
while hiba <> 0 do
begin
Write('Kerem az atalakitando szamot: ');
ReadLn(valtando);
valtando := UpCase(valtando);
for i := 1 to Length(valtando) do
if not (valtando[i] in tomb) then
begin
Writeln('Hiba ! A szam nem felel meg a ', alap, '-s szamrendszernek');
hiba := -1;
end
else
hiba := 0;
end;
WriteLn(Melyikre(alap1, (Tizesre(alap, valtando))));
ReadLn;
end.
Nem fűznék hozzá semmit, nagyon alap.
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!