Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевод чисел
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DeIYIoN
Помогите пожалуста..полный завал...
Мне нужно написать обучающую программу по переводу чисел...
Она должна обучать переводу пользователя...
Совсем не знаю как это сделать..
Буду очень благодарен!!!
volvo
Переводу чисел КУДА? Каких чисел? Точнее можно изъясняться?
DeIYIoN
Перевод из одной системы счисления в другую...системы счисления могут быть разными...
volvo
А теперь - уточни, что именно ты подразумеваешь под
Цитата
Она должна обучать переводу пользователя...
Вот я - пользователь, что должна делать программа, если я хочу обучиться переводу чисел из СС с основанием 10 в СС с основанием 7? Пошагово, пожалуйста...

Это ни разу не придирка, ты просто написал "обучить", но чтоб обучить одного, достаточно показать ему результат и написать алгоритм (словами), а чтоб научить другого - надо рассказывать, какая цифра откуда взялась, и еще цветную "мультипликацию" сделать, чтоб он понял... Итак, что должна делать программа в моем случае?

Опять же, числа - только целые, или возможны еще и вещественные?
DeIYIoN
Т. е. если конечно я сам понимаю правильно...она должна показывать как осуществляется перевод числа из одной системы счисления в другую пошагово...т.е. что как бы делал я что бы перевести это чило в ручную..
Наверно необхадимо сделать что то вроде меню..с выбором пути перевода(из n-ой в 10-ную, из 10-ной в n-ую)...у меня сложность и возникла с тем что я не знаю как сделать программу обучающей... mellow.gif

Добавлено через 2 мин.
..да забыл...нужно хотя бы сделать только для целых чисел...

Добавлено через 3 мин.
..да и ещё забыл...было бы конечно не плохо с, как ты написал, "мультипликацией"(это сложно наверно очень)...но наверно достаточно было бы что б был написан алгоритм перевода и ответ...
Lapp
Цитата(DeIYIoN @ 3.06.2009 18:40) *
как сделать программу обучающей... mellow.gif
...
было бы конечно не плохо с, как ты написал, "мультипликацией"(это сложно наверно очень)...но наверно достаточно было бы что б был написан алгоритм перевода и ответ...
Я шибко звиняюсь за оффтоп, но странна мне эта идея весьма.. Забавен сам ход мысли преподавателя, который такое задает. Так и видится, что он насмотрелся всяких флэшек подобного рода, и в его сознании они подменили суть мишурой..
DeIYIoN
Так значит никто мне не поможет....жаль...если не здам прогу могу собираться в армию...
Lapp
Цитата(DeIYIoN @ 3.06.2009 20:00) *
Так значит никто мне не поможет....жаль...если не здам прогу могу собираться в армию...
Эй, cool down, pal)). smile.gif
Зачем так? Поможем, конечно. Главное, чтоб ты помогал нам помогать тебе)). Я подумаю..

PS
Ты бы лучше убрал первую строчку...
DeIYIoN
Так значит никто мне не поможет....жаль...если не здам прогу могу собираться в армию...


Добавлено через 8 мин.
Сори за повтор...не совсем разобрался как удалять первуюю строчку.. blush.gif

Добавлено через 1 мин.
Цитата(Lapp @ 3.06.2009 20:09) *

Эй, cool down, pal)). smile.gif
Зачем так? Поможем, конечно. Главное, чтоб ты помогал нам помогать тебе)). Я подумаю..



Просто я уже отчаялся...
Lapp
Цитата(DeIYIoN @ 3.06.2009 20:14) *
Просто я уже отчаялся...
Ты можешь для начала посмотреть в FAQе про перевод и сделать просто прогу для перевода? Потом ее доработаем для обучения.
DeIYIoN
Прога для перевода есть...написано правда коряво, но...
Lapp
Цитата(DeIYIoN @ 3.06.2009 20:56) *
Прога для перевода есть
Дык. Давай..
DeIYIoN
коряво потому что писал сам...
Вот... (Показать/Скрыть)


Сча попробую изменить используя информацию которую нашел тут...
DeIYIoN
Нашел темы В FAQ про перевод чисел с двумя функциями перевода..и как их объеденить в одной программе..там ведь переменая "n" разных типов....я не очень силен в Поскале...

Вот что у меня получилось... (Показать/Скрыть)
Lapp
Я долго думал, как "обучать", и придумал нечто совсем простое. Но мне кажется, что основная идея тут соблюдена. Программа не дописана, поскольку я решил, что надо спросить, пойдет ли такой стиль.

type
var
a: string;
b,v: LongInt;
d: integer;
c: char;
i,n: integer;
Good: boolean;
Digs: set of char;

function DigVal(c: char): integer;
begin
if c<#58 then DigVal:=Ord©-48 else DigVal:=Ord©-54
end;

begin
Write('Введите основание исходной системы счисления (от 1 до 37): ');
ReadLn(b);
if b>9 then d:=9 else d:=b-1;
WriteLn('В системе с основанием ',b,' для ввода числа вы можете использовать');
Write('цифры от 0 до ',d);
if b=11 then Write(' и латинскую букву A')
else if b>11 then Write(' и латинские буквы от A до ',Chr(b+54));
WriteLn;
if b>10 then WriteLn('при этом буквы имеют такие числовыме значения:');
for i:=10 to b-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(b+54) do Include(Digs,c);

repeat
Write('Введите число для перевода: ');
ReadLn(a);
for i:=1 to Length(a) do a[i]:=UpCase(a[i]);
Good:=true;
for i:=1 to Length(a) do Good:=Good and (a[i] in Digs);
if not Good then WriteLn('Вы ввели неправильный символ. Повторите ввод.');
until Good;
n:=Length(a);

WriteLn('Теперь переведем число в машинное представление.');
WriteLn('Для этого воспользуемся формулой:');
WriteLn('m = a[0] + a[1]*b + a[2]*b^2 + a[3]*b^3 + ... + a[n]*b^n');
WriteLn('Здесь символ ^ означает возведение в степень,');
WriteLn('цифры в числе пронумерованы справа налево.');
WriteLn;
WriteLn('В нашем случае это будет выглядеть так:');
for i:=1 to n do begin
if i>1 then Write(' + ');
Write(DigVal(a[n-i+1]));
if i>1 then Write('*',b);
if i>2 then Write('^',i-1);
end;

v:=DigVal(a[1]);
for i:=2 to n do v:=v*b+DigVal(a[i]);

WriteLn;
WriteLn('Произведя вычисления, получим:');
WriteLn(v);
WriteLn('- тут использована десятичная запись.');

WriteLn('Теперь введите основание системы счисления,');
Write('в которую вы хотите преревести ваше число (от 1 до 37): ');
ReadLn(b);
WriteLn;
WriteLn('Перевод будем осуществлять в цикле...');

ReadLn
end.

Естественно, всяких красивостей можно добавить. Типа чистить экран, разноцветность всякая..
DeIYIoN
А можно как нить переносить текст сразу в Паскаль...не переписывая вручную..?
Lapp
Цитата(DeIYIoN @ 5.06.2009 18:51) *

А можно как нить переносить текст сразу в Паскаль...не переписывая вручную..?

copy - paste? blink.gif

а, понял, у тебя кодировка слетает..
Ты FAR'ом не пользуешься?
DeIYIoN
Нет..может и есть где..

Добавлено через 1 мин.
Нашел...
Lapp
скачай и установи себе FAR
http://farmanager.com/download.php?l=en

1. Скопируй текст программы (выделить и Ctrl-C)
2. в Фаре начни новый файл Shift-F4
3. Сделай кодировку DOS до вставки
4. Вставь (Ctrl-V)
5. Сохрани с нужным названием (F2)
6. выйди и зайти в ТР
7. открой этот файл в ТР

Добавлено через 1 мин.
Менять кодировку клавишей F8, кодировка написана в верхней строке
DeIYIoN
Долго буду смотреть..потому что у меня в Паскале нет руского языка..так что я пока переписываю текст что б понять программу...

Добавлено через 10 мин.
Всё супер...можно доделывать программу...
DeIYIoN
Долго ещё дописывать..?
Lapp
Цитата(DeIYIoN @ 5.06.2009 20:40) *
Долго ещё дописывать..?
Вот, не знаю, с какой скоростью ты дописываешь. Оценивай сам.

Слушай, я тебе дал идею и написал половину проги.
Ты серьезно считаешь, что совсем не должен приложить руку, а все тебе только должны?
Я готов помогать и дальше, но только если ты что-то будешь делать.
DeIYIoN
Нет, я так не считаю..извини что надоел уже изрядно...я просто не очень силен в программировании...
И я честно говоря не могу понять что должно идти дальше...
DeIYIoN
В общем вот что у меня получилось... (Показать/Скрыть)


Но тут есть проблема...во 2 пункте..нужно ввести число в выбранной системе счисления...но там буквы ввести нельзя...не подскажете как это можно исправить..?
И еще может у кого нить есть идеи как разместить весь этот текст на экране..?
Lapp
Цитата(DeIYIoN @ 8.06.2009 21:08) *

во 2 пункте..нужно ввести число в выбранной системе счисления...но там буквы ввести нельзя...не подскажете как это можно исправить..?
Я не понял, где этот ввод. Скопируй сюда кусок, о котором ты говоришь.
DeIYIoN
Прошу прощения! Ошибся немного...запутался...
volvo
Ну, так у тебя H описано как LongInt, а когда вводишь число в СС отличной от 10, надо вообще-то вводить его как строку.

Но: у тебя ж написано, что надо перевести число в 10-ную СС, и "показать, что получилось", какие же буквы A .. F? Так что ты для себя реши, тебе надо 10-ное представление вводить, или все-таки в другой СС...
DeIYIoN
Lap хочу поблагодарить Вас за помощь и Volvo тоже первого за идеи...второго за помощь в создании меню..
БАЛЬШОЕ СПАСИБО!!!

А как вам такой метеод "обучающей" программы..?

Добавлено через 2 мин.
И что нить скажете по размещению текста..?
Lapp
Цитата(DeIYIoN @ 8.06.2009 22:20) *
Lap хочу поблагодарить Вас за помощь и Volvo тоже первого за идеи...второго за помощь в создании меню..
БАЛЬШОЕ СПАСИБО!!!
Пожалуйста smile.gif

Я глану попозже сегодня, что ты там нахимичил))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.