Помощь - Поиск - Пользователи - Календарь
Полная версия: графика и арифмет. прогрессия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nitro
1) Вводишь 6-значное число, программа графически рисует эти цифры в том же порядке. Цифры должны быть того же формата, как и почтовый индекс на конверте.
2) Среди натуральных чисел, не превосходящих заданного числа N, найти такие, цифры которых образуют возрастающую арифметическую прогрессию.


Например, для N=25 выводятся числа 12 13 14 15 16 17 18 19 23 24 25
3) Составить программу проверки знаний первоклассника по математике. В выражениях используются числа от 0 до 100 и одна из операций: сложение, вычитание, умножение, целочисленное деление. Для ввода арифметических выражений использовать латинскую раскладку клавиатуры.
Например:
С клавиатуры вводится выражение 2x2=4, на экран выводится сообщение «Правильно».
Вводится выражение 5:2=2 - сообщение «Неправильно».

Если выражение вводится не строкой, а отдельными элементами, задачу считать нерешенной.

p.s к 3) задача я все сделал, но немогу сделать это со строкой.
klem4
Наверное все эти задачи или очень похожие уже решались, вот например первая : Калькулятор
только у меня там дурацкое решение возми другое там несколько помойму

Цитата
Например, для N=25 выводятся числа 12 13 14 15 16 17 18 19 23 24 25


А куда делись 20 21 22 ? или 1 2 3 4 5 .... ? Какое-то странное задание nea.gif

по 3-му заданию ищи интерпритатор выражений или консольный калкулятор, поймешь как делать.
qwer
Во втором задании ариф. прогрессия должна быть: 1,2,3,4,...,24,25 как это сделать?
А что такое интерпритатор выражений или консольный калкулятор?
volvo
Цитата
А что такое интерпритатор выражений или консольный калкулятор?

А что такое "Поиск по форуму"?
volvo
nitro,
Цитата
Вводишь 6-значное число, программа графически рисует эти цифры в том же порядке. Цифры должны быть того же формата, как и почтовый индекс на конверте.

Uses Graph;

Type
  TDigit = Array[0 .. 9, 1 .. 9] Of Byte;
Const
  DX = 20;
  DY = 30;
  Digits: TDigit =
    (
     (1, 1, 1, 1, 1, 1, 0, 0, 0),
     (0, 0, 1, 1, 0, 0, 0, 0, 0),
     (0, 1, 1, 0, 1, 1, 0, 1, 0),
     (0, 1, 0, 0, 0, 0, 1, 1, 1),
     (1, 0, 1, 1, 0, 0, 0, 1, 0),
     (1, 1, 0, 1, 1, 0, 0, 1, 0),
     (0, 0, 0, 1, 1, 1, 1, 1, 0),
     (0, 1, 0, 0, 0, 1, 1, 0, 0),
     (1, 1, 1, 1, 1, 1, 0, 1, 0),
     (1, 1, 1, 0, 0, 0, 0, 1, 1));

var
  n: string[6];

Procedure ShowDigit(xStart, yStart: Word; Digit: Byte);
var i: integer;
Begin
  for i := 1 to 9 do begin
    {
      Цвета можешь поменять по желанию.
      Сейчас LightRed - цвет линии, Red - как бы "фоновый"
    }
    if Digits[Digit, i] = 1 then setcolor(LightRed)
    Else SetColor(Red);

    Case i of
      1: Line(xStart, yStart, xStart, yStart+DY);
      2: Line(xStart, yStart, XStart+DX, yStart);
      3: Line(xStart+DX, yStart, xStart+DX, yStart+DY);
      4: Line(xStart+DX, yStart+DY, xStart+DX, yStart+2*DY);
      5: Line(xStart+DX, yStart+2*DY, xStart, yStart+2*DY);
      6: Line(xStart, yStart+2*DY, xStart, yStart+DY);
      7: Line(xStart+DX, yStart, xStart, yStart+DY);
      8: Line(xStart, yStart+DY, xStart+DX, yStart+DY);
      9: Line(xStart+DX, yStart+DY, xStart, yStart+2*DY);
    end;
  end;
End;

var
  gdriver, gmode, ErrCode: Integer;
  i: byte;
  xs, ys: word;

begin
  write('Введите индекс: '); ReadLn(n);
  {
    n := '123456'; (* Тест *)
  }
  xs := 100; ys := 100;

  initgraph(gdriver, gmode, '');
  if graphresult <> grOk then begin
    writeln('Graph error: ', grapherrormsg(ErrCode));
    ReadLn; Halt(100);
  end;

  for i := 1 to length(n) do begin
    ShowDigit(xs, ys, Ord(n[i])-Ord('0'));
    inc(xs, DX+10);
  end;
  readln;

  closegraph;
end.
nitro
Ну это ужу более менее хорошо, спасибо. А можно это сделать через процедуры. Т.е 1процедура рисует 1, другая-2 и т.д.
volvo
Цитата
Ну это ужу более менее хорошо, спасибо.
Ну, а это уже не более-менее, а просто глупость. Зачем бить программу на ненужные процедуры? Что, ты думаешь, если у тебя будет десяток процедур, от этого улучшится читаемость? Да у тебя же просто программа в 10 раз увеличится и все!!!

Подумай сам, по-любому, в КАЖДОЙ процедуре надо проверять, какие линии рисовать, а какие - нет (только не говори, что ты хочешь жестко задать цифры только Line-ами, этого я делать не буду, и тебе не советую. Ибо если нужно будет чуть-чуть подправить формат цифр, то в моей программе достаточно исправить ОДНУ процедуру, а так как ты хочешь - придется исправлять 10 (!!!))

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