1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Помогите пожалуста..полный завал... Мне нужно написать обучающую программу по переводу чисел... Она должна обучать переводу пользователя... Совсем не знаю как это сделать.. Буду очень благодарен!!!
function FromDec(n, radix:longint):string; var s:string; const digit: string[16]='0123456789ABCDEF'; begin s:=''; repeat s:=digit[(n mod radix)+1]+s; n:=n div radix; until n=0; FromDec:=s; end;
function ToDec(n:string; radix:longint):longint; var m, i:longint; const digit:string[16]='0123456789ABCDEF'; begin m:=0; while(n[1]='0') and (length(n)>1) do delete(n,1,1); for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1; ToDec:=m; end;
begin Zast;
repeat writeln; writeln('1. PEREVOD CHISEL IZ 10-nou SISTEMU SCHISLENIYA V "G"'); writeln; writeln('2. PEREVOD CHISEL IZ "G" SISTEMU SCHISLENIYA V 10-nuy'); writeln; writeln('3. Vihod.'); Writeln; write('viberete neobhadimoe deistvie (1/2) '); readln(t); case t of 1: begin clrscr; writeln('PEREVOD CHISEL IZ 10-nou SISTEMU SCHISLENIYA V "G" SISTEMY SCHISLENIYA'); writeln; Writeln('Perevod chisel iz 10-noy sistemi schisleniya v "G" osyschestvlyaetsya'); Writeln('po sleduyschemy pravilu:'); Writeln; Writeln('1. Razdelit chislo na osnovanie sistemi "G", toy sistemi, v kotoruy '); Writeln(' vi hotite perevesti eto choslo.'); Writeln; Writeln('2. Poluchenoe nepolnoe chastnoe opyat razdelit na osnovanie sistemi.'); Writeln; Writeln('3. Povtoryat punkt 2 do teh por, poka poluchennoe nepolnoe chstnoe'); Writeln(' ne budet menshe osnovaniya.'); Writeln; Writeln('4. Zapisat ostatki ot deleniya v poryadke "ot poslednego k pervomy",'); Writeln(' nachinaya s poslednego chastnogo.'); Writeln; if radix>9 then Writeln('Cifri bolshie 9 zapisivaem soglasno ih bykvennomu ekvivalentu!'); Writeln; readkey; clrscr; Writeln('Rassmotrim primer: perevesti chislo 11 iz 10-noy v 2-nuy sistemu schisleniya.'); Writeln; Writeln('11:2=5 (ostatok "1");'); Writeln('5:2=2 (ostatok "1");'); Writeln('2:2=1 (ostatok "0").'); Writeln; Writeln('Zapisivaem ostatki v obratnom ot ih polucheiya poryadke, nachinaya'); Writeln('s poslednego chastnogo:'); Writeln('11(v 10-noy) = 1011(v 2-noy)'); Writeln; Writeln('Teper proverim vashi znaniya...'); Writeln; readkey; clrscr; repeat write('Vvedite sistemy schisleniya, v kotoruy vi hotite perevesti chislo: '); readln(radix); Writeln; if radix>9 then d:=9 else d:=radix-1; WriteLn('V sisteme s osnovaniem ',radix,' dlya zapisi chisla vi mogete ispolzovat'); Write('cifri ot 0 do ',d); if radix=11 then Write(' i latinskyu bykvy A') else if radix>11 then Write(' i latinskie bykvi ot A do ',Chr(radix+54)); WriteLn; if radix>10 then WriteLn('pri etom bykvi imeut takie znacheniyaя:'); for i:=10 to radix-1 do WriteLn(Chr(i+55),' = ',i); WriteLn; Digs:=[]; for c:='0' to Chr(d+48) do Include(Digs,c); for c:='A' to Chr(radix+54) do Include(Digs,c); Writeln; write('Vvedite chislo, kotoroe vi budete perevodit: '); readln(n_long); writeln; writeln('Teper ispolzuyte pravila perevoda i perevedite chislo v neobhadimuy'); writeln('sistemu schisleniya'); writeln; write('Vvedite chislo, kotoroe u vas poluchilos - ');readln(b); if b<>FromDec(n_long,radix) then Writeln('Otvet ne verniy! Poprobuyte eche raz...') else Writeln('Congratilation!!! Otvet veren!'); until b=FromDec(n_long,radix); end; 2: begin clrscr; writeln('PEREVOD CHISEL IZ "G" SISTEMU SCHISLENIYA V 10-nuy'); writeln; WriteLn('Dlya perevoda chisla iz "G" sistemi schisleniya v 10-nuy nugno vospolzovatsya'); WriteLn('pravilom: '); Writeln; Writeln('1. Pronumerovat razryadi chisla s prava na levo, nachinaya s 0.'); Writeln; Writeln('2. Predstavit ishodnoe chislo v vvide:'); Writeln(' A = a[0]*G^0 + a[1]*G^1 + a[2]*G^2 + a[3]*G^3 + ... + a[n]*G^n,'); Writeln(' gde v skobkah ykazan razryad chisla, simvol ^ oznachaet vozvedenie v stepen,'); Writeln(' A - nashe chislo v 10-noy sisteme schisleniya.'); Writeln; readkey; Writeln('Rassmotrim primer: perevesti chislo 1011 iz 2-noy v 10-nuy sistemy shisleniya.'); Writeln; Writeln('1011(v 2-noy)=1*2^0+1*2^1+0*2^2+1*2^3=1+2+0+8=11(v 10-noy)'); repeat write('Vvedite sistemy schisleniya, iz kotoroy vi budete perevodit chislo: '); readln(radix); Writeln; if radix>9 then d:=9 else d:=radix-1; WriteLn('V sisteme s osnovaniem ',radix,' dlya zapisi chisla vi mogete ispolzovat'); Write('cifri ot 0 do ',d); if radix=11 then Write(' i latinskyu bykvy A') else if radix>11 then Write(' i latinskie bykvi ot A do ',Chr(radix+54)); WriteLn; if radix>10 then WriteLn('pri etom bykvi imeut takie znacheniyaя:'); for i:=10 to radix-1 do WriteLn(Chr(i+55),' = ',i); WriteLn; Digs:=[]; for c:='0' to Chr(d+48) do Include(Digs,c); for c:='A' to Chr(radix+54) do Include(Digs,c); Writeln; write('Vvedite chislo, kotoroe vi budete perevodit: '); readln(n_str); writeln; writeln('Teper ispolzuyte pravila perevoda i perevedite chislo v 10-nuy sistemu'); writeln('schisleniya'); writeln; write('Vvedite chislo, kotoroe u vas poluchilos - ');readln(h); writeln; if h<>ToDec(n_str,radix) then Writeln('Otvet ne verniy! Poprobuyte eche raz...') else Writeln('Congratilation!!! Otvet veren!'); writeln; until h=ToDec(n_str,radix); end;
3: halt
else begin writeln('Takogo punkta v menu net!!!'); ReadKey; end; end;
write('once again? (Y/N)'); readln(a); clrscr; until not (a in ['Y', 'y']); End.
Но тут есть проблема...во 2 пункте..нужно ввести число в выбранной системе счисления...но там буквы ввести нельзя...не подскажете как это можно исправить..? И еще может у кого нить есть идеи как разместить весь этот текст на экране..?