Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ калькулятор

Автор: Yurka 29.06.2005 18:50

Напишите программу, что имитирует экран калькулятора, другими словами, нужно, чтобы в ней после введения целого числа меньше 10 (|N | < 10) из клавиатуры вид этой цифры отображался на дисплее. Символ числа должен появляться сразу после ввода фигуры числа

Изображение каждой фигуры или отметки появляется с помощью включения/выключения семи элементов жидкокристаллического дисплея. Состояние программы-дисплея должно отображаться с помощью символов '\' (вертикальная опция), 'J (подчеркивание) и '' (пусто). Цифры и символы минуса должны отображаться следующим образом:
Введение: Файл ввода включает целые числа N (|Nj<1010), одно число в линейке.
Выведение: Исходный файл включает три строки с символическим рисунком дисплея, отдельным на каждую цифру.

Вот такая вот задача. Чесно говоря первая половина вроде понятна, а вот вторая с дисплеем angry.gif

Автор: volvo 29.06.2005 18:57

Цитата(Yurka @ 29.06.05 14:50)
Чесно говоря первая половина вроде понятна, а вот вторая  с дисплеем angry.gif

Что именно "с дисплеем" не понятно? Как организовать его на экране? Как зажигать/гасить элементы дисплея?

Это вообще должно быть в каком режиме (текст или графика)?
Хочешь получать конкретные ответы - задавай конкретные вопросы. Телепаты у нас в отпуске...

Автор: Yurka 29.06.2005 23:30

Цитата(volvo @ 29.06.05 14:57)
Это вообще должно быть в каком режиме (текст или графика)?
Хочешь получать конкретные ответы - задавай конкретные вопросы. Телепаты у нас в отпуске...

Я прикреплю файли с условием и рисунком к условию
задания первоначально дали на английском языке. Есть файл с оригиналом задания на английском. Перевод я вроде сделал нормально, но всякое может быть, вообщем если есть знания английского - можна посмотреть оргинал, извинясь за неудобства.... unsure.gif


Прикрепленные файлы
Прикрепленный файл  __________________.doc ( 340.5 килобайт ) Кол-во скачиваний: 302

Автор: klem4 30.06.2005 17:48

у тебя сказано

Цитата
'\' (вертикальная опция), 'J (подчеркивание) и '' (пусто).


но на картинке явно видно, что исползуются : '|' и '-'

можно замутить такой маразм в текстовом, но это будет не красиво sad.gif

Автор: volvo 30.06.2005 18:52

klem4, а ты предлагаешь сделать и графическую (для красоты) и текстовую (для вывода в файл) версии?

Автор: klem4 30.06.2005 19:19

Вот такая кака получилась, ттолько тут число адо вводить сразу :

uses crt;

type

TDigit = array[1..7] of string[5];

const

one:TDigit =

('|','|','|','|','|','|','|');

two:TDigit =
(' ---',' |',' |',' ---','|','|',' ---');

thre:TDigit =
(' ---',' |',' |',' ---',' |',' |',' ---');

four:TDigit =
('| |','| |','| |',' ---',' |',' |',' |');

five:TDigit =
(' ---','|','|',' ---',' |',' |',' ---');

six:TDigit =
(' ---','|','|',' ---','| |','| |',' ---');

seven:TDigit =
('---',' |',' |',' |',' |',' |',' |');

eight:TDigit =
(' ---','| |','| |',' ---','| |','| |',' ---');

nine:TDigit =
(' ---','| |','| |',' ---',' |',' |',' ---');

zero:TDigit =
(' ---','| |','| |','| |','| |','| |',' ---');

procedure WriteDigit(var Digit:TDigit; ii:integer);

var
j:integer;
begin
for j:=1 to 7 do begin
gotoxy(pred(ii)*10,j);
writeln(Digit[j]);
end;
end;
var

temp:array[1..11] of char;
i,j:integer;

Begin

clrscr;

write('Введите число : ');

i:=0;

repeat

inc(i);

temp[i]:=readkey;

write(temp[i]);

until temp[i]=#13;

clrscr;

i:=1;
while(not(temp[i]=#13)) do begin
case temp[i] of

'1': WriteDigit(one,i);


'2': WriteDigit(two,i);

'3': WriteDigit(thre,i);

'4': WriteDigit(four,i);

'5': WriteDigit(five,i);

'6': WriteDigit(six,i);

'7': WriteDigit(seven,i);

'8': WriteDigit(eight,i);

'9': WriteDigit(nine,i);

'0': WriteDigit(zero,i);

end;
inc(i);
end;

readln;

End.


Автор: volvo 30.06.2005 19:36

Слишком много написано букв... Делаем вот так:

const
digits[0 .. 9] of TDigit = (
(' ---','| |','| |','| |','| |','| |',' ---'), { zero }
('|','|','|','|','|','|','|'), { one }
(' ---',' |',' |',' ---','|','|',' ---'), { two }
(' ---',' |',' |',' ---',' |',' |',' ---'), { three }
('| |','| |','| |',' ---',' |',' |',' |'), { four }
(' ---','|','|',' ---',' |',' |',' ---'), { five }
(' ---','|','|',' ---','| |','| |',' ---'), { six }
('---',' |',' |',' |',' |',' |',' |'), { seven }
(' ---','| |','| |',' ---','| |','| |',' ---'), { eight }
(' ---','| |','| |',' ---',' |',' |',' ---') { nine }
);

...
while(not(temp[i]=#13)) do begin
case temp[i] of
'0' .. '9': WriteDigit(digits[ord(temp[i]) - ord('0')], i);
end;
inc(i);
end;

:yes:

Автор: Archon 2.07.2005 19:52

Хм...

Цитата
Изображение каждой фигуры или отметки появляется с помощью включения/выключения семи элементов жидкокристаллического дисплея.

Цифры должны выглядеть так:
Код
 _      _
| |  |  _|
|_|  | |_
и тд

Заменяем массив на
const
digits : array [0 .. 9] of TDigit = (
(' _ ', '| |', '|_|'), { zero }
(' ', ' |', ' |'), { one }
(' _ ', ' _|', '|_ '), { two }
(' _ ', ' _|', ' _|'), { three }
(' ', '|_|', ' |'), { four }
(' _ ', '|_ ', ' _|'), { five }
(' _ ', '|_ ', '|_|'), { six }
(' _ ', ' |', ' |'), { seven }
(' _ ', '|_|', '|_|'), { eight }
(' _ ', '|_|', ' _|') { nine }
);


А TDigit нужно описать, как
type

TDigit = array[1..3] of string[3];



Ну и в WriteDigit соответственно 7 на 3 поменять...

добавлено: исправил пару неточностей.

Автор: Archon 2.07.2005 20:07

Ой! Тут ведь ещё:

Цитата
Input: Input file contains integer values N (|Nj<1010), one number per line.
Output: Output file contains three lines with symbolic display image for each input number.

Поясняю:
Из исходного файла считываем цифры (число цифр < 1010) при помощи ReadLn (т.к. один символ на строку). Затем создаём файл и записываем туда всё тоже самое, только в переработаном виде, и каждый символ занимает теперь не одну строчку а 3 (по 3 символа).

Что непонятно жду вопросов.

Автор: -Archon- 3.07.2005 3:05

Уже не жду, вот:

uses
crt;

type
TDigit = array [1 .. 3] of string [3];

const
digits : array [0 .. 9] of TDigit = (
(' _ ', '| |', '|_|'), { zero }
(' ', ' |', ' |'), { one }
(' _ ', ' _|', '|_ '), { two }
(' _ ', ' _|', ' _|'), { three }
(' ', '|_|', ' |'), { four }
(' _ ', '|_ ', ' _|'), { five }
(' _ ', '|_ ', '|_|'), { six }
(' _ ', ' |', ' |'), { seven }
(' _ ', '|_|', '|_|'), { eight }
(' _ ', '|_|', ' _|') { nine }
);

var
temp : array [1 .. 11] of char;
i, digit : integer;
input_file, output_file : text;
input_file_name, output_file_name : string;

Begin
clrscr;
Write('Введите имя файла с даммыми: ');
ReadLn(input_file_name);
Assign(input_file, input_file_name);
Reset(input_file);

Write('Введите имя файла для вывода результата: ');
ReadLn(output_file_name);
Assign(output_file, output_file_name);
Rewrite(output_file);

while not eof(input_file) do begin
ReadLn(input_file, digit);
case digit of
0 .. 9: for i := 1 to 3 do
writeln(output_file, digits[Digit][i]);
end;
end;

Close(input_file);
Close(output_file);

Writeln('Операция завершена');
Writeln('Нажмите любую клавишу для продолжения...');
readkey;
End.

Автор: Yurka 3.07.2005 23:17

Цитата(-Archon- @ 2.07.05 23:05)
Уже не жду, вот:

Спасибо большое!!! Только я вот работу с файлами ещё не очень освоил.Сделал с этой проги exe-файл. Вообщем выдает при запуске что файл не найден после того как ввожу имя файла с даными. Что я не так сделал или точнее недоделал?

Автор: volvo 3.07.2005 23:24

Yurka,
файл с данными где находится? В той же папке, где .EXE? И вводить надо не только его имя, а вместе с расширением... Например,

Цитата
C:\>Введите имя файла с даммыми: input.txt