Помощь - Поиск - Пользователи - Календарь
Полная версия: калькулятор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Yurka
Напишите программу, что имитирует экран калькулятора, другими словами, нужно, чтобы в ней после введения целого числа меньше 10 (|N | < 10) из клавиатуры вид этой цифры отображался на дисплее. Символ числа должен появляться сразу после ввода фигуры числа

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

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

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

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

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


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

можно замутить такой маразм в текстовом, но это будет не красиво sad.gif
volvo
klem4, а ты предлагаешь сделать и графическую (для красоты) и текстовую (для вывода в файл) версии?
klem4
Вот такая кака получилась, ттолько тут число адо вводить сразу :

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
Слишком много написано букв... Делаем вот так:

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
Хм...
Цитата
Изображение каждой фигуры или отметки появляется с помощью включения/выключения семи элементов жидкокристаллического дисплея.

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

Заменяем массив на
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
Ой! Тут ведь ещё:
Цитата
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-
Уже не жду, вот:
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
Цитата(-Archon- @ 2.07.05 23:05)
Уже не жду, вот:

Спасибо большое!!! Только я вот работу с файлами ещё не очень освоил.Сделал с этой проги exe-файл. Вообщем выдает при запуске что файл не найден после того как ввожу имя файла с даными. Что я не так сделал или точнее недоделал?
volvo
Yurka,
файл с данными где находится? В той же папке, где .EXE? И вводить надо не только его имя, а вместе с расширением... Например,
Цитата
C:\>Введите имя файла с даммыми: input.txt
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.