program nowy;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
suma, blokada,i,k,j, liczba,sys1,sys2:integer;
T:integer;
tab:array[1..100] of integer;
tab2: array[1..100] of integer;
begin
repeat
{$I-}
writeln('podaj system liczbowy w jakim podasz swoja liczbe');
readln(sys1);
if (sys1<2) or (sys1>10) then writeln(' brak zakresu, wprowadz wartosc od 2 do 10'); { warunek blokujacy podanie systemu
większego 10 i mniejszego od 2 }
blokada:=IOresult;
if blokada <>0 then writeln('blad');
until (sys1>=2) and (sys1<=10); // petla spelniajaca warunek dopóki podawany jest sys. większy od 2 i mniejszy od 10
case sys1 of
2:writeln('wybrales system binarny');
3:writeln('wybrales system trojkowy');
4:writeln('wybrales system czworkowy');
5:writeln ('wybrales system piatkowy');
6:writeln('wybrales system szostkowy');
7:writeln('wybrales sysyem siodemkowy');
8:writeln('wybrrales system osemkowy');
9:writeln('wybrales system dziewiątkowy');
10: writeln('wybrales system dziesiatkowy');
end;
writeln('wprowadz liczbe 6 cyfrowa w wybranym przez siebie systemie');
repeat
read(liczba);
if (liczba >999999) or (liczba <100000) then writeln(' bledna liczba, wprowadz ponownie wartosc');
until (liczba<999999) and (liczba >100000);
readln;
for i:=1 to 6 do
begin
tab[i]:=(liczba mod 10); // liczba dzielona przez reszte z 10 i zapisuje do tab[1]
// do zmiennej suma dodaje sumę + podzieloną wczesniej liczbe
liczba:=liczba div 10; // zmiennej liczba przypisuje zmniejszona wartosc liczby dzielona przez 10.
end;
{mnozenie rozlozonych wczesniej liczb przez podstawe systemu}
T:=(tab[6]*(sys1*sys1*sys1*sys1*sys1))+(tab[5]*(sys1*sys1*sys1*sys1))+(tab[4]*(sys1*sys1*sys1))
+ (tab[3]*(sys1*sys1)) + (tab[2]*(sys1)) + (tab[1]*1);
writeln('liczba w systemie dziesietnym to ' , T);
writeln('podaj na jaki system chcesz zamienic liczbe');
writeln(T);
readln(sys2);
if (sys2>=2) and (sys2<=10) then
begin
for k:=1 to 6 do
begin
tab2[k]:= (T mod sys2);
T:= T div sys2;
end;
for j:=1 to 6 do
write(tab2[7-j]);
end;
readln;
end.
Witam, jest ktoś wstanie poprawić mi ten program ?
Nie działa:
1 blokada znaków- tzn musimy wprowadzić 6 cyfrową liczbę tylko i wyłącznie..
2 blokada liczby= żadna z wprowadzonych liczb nie może być większa
od podanego systemu. Np podajemy system 5-tkąwy to nie możemy użyć
liczby 5 i wyżej-wyświetli błąd w pętli repeat - tak to widzę
przynajmniej
3 problem jest z zamianą systemu 10 na dowolny inny od 2-10.. na ten sam
zamienia dobrze, ale na innych już sobie 0 dopisuje.. Ta pętla coś
ostatnie nie działa.
Ktoś chętny pomóc? przerobić ten program ale bez jakiś wielkich zmian jeżeli się da?
Mod; nie wiem czemu mod przeniósł do kosza ostatni temat, skoro kod jest i nie proszę o napisanie kodu od zera, bo to bez sensu...
Generalnie rozwiązania moje są już zawarte w kodzie... ale nie działają i nie mam pojęcia jak to przerobić kompletnie. Szczególnie ta blokada przy wpisywaniu liczb większych od systemu..
ale skoro;
rozw 1
if (liczba >999999) or (liczba <100000) then writeln(' bledna liczba, wprowadz ponownie wartosc');
until (liczba<999999) and (liczba >100000);
rozw 2
brak pomysłu calkowicie
rozw. 3 użyłem pętli for. Jednak wyrzuca błąd. Generalnie próbowałem na samych warunkach, ale roboty od groma i efekt również nie najlepszy.
write(tab2[7-j]);
p.s Gdybyto byl kod kolegi to bym go nie rozumiał.. w tym wypadku rozumie wszystko, ale nie jestem zaawansowany by używać jakiś funkcji zmieniających z string na znaki ...
dodanie znacznika <code class="delphi"> - fp