Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Помогите решить задачку


Автор: kent 11.5.2005, 19:12
Помогите разобраться с задачей:
Арифметические действия над числами пронумерованы следующим образом:
1-сложение,2-вычитание,3-умножение,4-деление.Дан номер действия и два числа
А и В (В не равно нулю). Выполнить над числами указанное действие и вывести результат.

Код

Program Begin67;
var
A,B,y:Real;
x:Integer;
stop:Boolean;
begin
stop:=false;
repeat
WriteLn;
Write('Введите А,B:');
ReadLn(A,B);
Write('Введите номер операции:');
ReadLn(x);
case x of
1:y:=A+B;
2:y:=A-B;
3:y:=A*B;
4:y:=A/B;
else
stop:=true;
WriteLn('ошибка!!!');
end;
if not stop then
WriteLn('Результат операции:',y);
until stop
end.



я никак не пойму куда ставить (if (B<>0) then....) чтоб после ввода нуля программа выдавала сообщение об ошибке и заканчивала работать, куда я только не пытался ставить If c Then-ом, нифига не получается.

Автор: Fedor 11.5.2005, 19:21
Можно так:
Код

.....
readln(A,B);
if B=0 then halt;
......

Автор: SPrograMMer 11.5.2005, 20:13
Цитата(Fedor @ 11.5.2005, 19:21)
Можно так:

а можно и так:
Код

.....
readln(A,B);
if B=0 then 
  Begin
    WriteLn('B=0! незя!');
    Exit;
  End;
......

Автор: Штык 11.5.2005, 20:20
а можно так
Код

repeat
 readln(a,b);
until b<>0;

Автор: kent 11.5.2005, 21:15
Спасибо, помогли !!! smile

Автор: cardinal 11.5.2005, 21:54
kent, в следующий раз:
Название темы должно отражать ее суть!
Правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27

Автор: Fedor 11.5.2005, 22:06
Да, действительно!

Автор: anad 30.3.2006, 23:54
Вот задача: Даны две вещественные матрицы А(N*M), В(N*M). Получить матрицу С(N*M), каждый элемент которой равен сумме элементов i-строки матрицы А, которые отсутствуют в j-м столбце матрицы В. Использовать подпрограммы проверки наличия числа в j-м столбце матрицы В, вычисления суммы, формирования новой матрицы.
Очень на Вас надеюсь! Можно без подпрограмм, там я сама разберусь.
Вот пример с матрицами, если непонятно условие:

A=
1 2 3
4 5 1


B=
1 2 5
2 3 1

C=
c11 c12 c13
... ... ...

Т. е. с11=3 (т.к 1 есть в j-м столбце матрицы В); с12=1+3 (т.к. 2 есть есть в j-м столбце матрицы В) и т. д
Добавлено @ 23:56
Вот задача: Даны две вещественные матрицы А(N*M), В(N*M). Получить матрицу С(N*M), каждый элемент которой равен сумме элементов i-строки матрицы А, которые отсутствуют в j-м столбце матрицы В. Использовать подпрограммы проверки наличия числа в j-м столбце матрицы В, вычисления суммы, формирования новой матрицы.
Очень на Вас надеюсь! Можно без подпрограмм, там я сама разберусь.
Вот пример с матрицами, если непонятно условие:

A=
1 2 3
4 5 1


B=
1 2 5
2 6 1

C=
c11 c12 c13
... ... ...

Т. е. с11=3 (т.к 1 и 2 есть в j-м столбце матрицы В); с12=1+3 (т.к. 2 есть есть в j-м столбце матрицы В) и т. д

Автор: goranubis 31.3.2006, 17:48
помогите решить задачу. Подсчитать количество предложений в файле. smile

Автор: anad 31.3.2006, 22:15
Ну хоть кто-нибудь! Пожалуйста!

Автор: volvo877 1.4.2006, 00:00
anad, вот тебе основной блок программы (пока матрицы A, B заданы константами):
Код

const
  n = 2;
  m = 3;

type
  matrix = array[1 .. n, 1 .. m] of real;

const
  A: matrix =
  (
    (1, 2, 3),
    (4, 5, 1)
  );

  B: matrix =
  (
    (1, 2, 5),
    (2, 6, 1)
  );
var
  C: matrix;

procedure print_matrix(mx: matrix);
var i, j: integer;
begin
  for i := 1 to n do begin
    for j := 1 to m do
      write(mx[i, j]:5:0);
    writeln
  end;
end;

function exists_in_col(mx: matrix;
         j: integer; X: real): boolean;
var i: integer;
begin
  exists_in_col := true;

  for i := 1 to n do
    if mx[i, j] = X then exit;

  exists_in_col := false;
end;

var
  i, j, k: integer;
  s: real;

begin
  for i := 1 to n do
    for j := 1 to m do begin

      s := 0;
      for k := 1 to m do
        if not exists_in_col(B, j, A[i, k])
        then s := s + A[i, k];

      C[i, j] := s;
    end;

  print_matrix(C);
end.

Автор: anad 1.4.2006, 20:33
Спасибо, но мне нужно чисто на Паскале программу.

Автор: volvo877 1.4.2006, 21:55
А я тебе что, на С++ написал? Ты ее ХОТЯ БЫ соизволила запустить, прежде чем что-то ответить? Не нравится - пиши сама!

Автор: anad 1.4.2006, 22:41
Не идет что-то. И непонятна вот эта строчка:
if not exists_in_col(B, j, A[i, k])

Автор: Nikk 2.4.2006, 12:36
Помогите решить задачу в Паскале

Автор: cardinal 2.4.2006, 13:50
Пожалуйста, один топик - один вопрос.
Правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27

Автор: Nikk 2.4.2006, 18:44
cardinal,
Может я не понимаю вашего языка.
Помогите решить задачу:
Даны два одномерных массива D( ) и E ( ), состоящие из 7 элементов. Разработайте программу построения матрицы F( ), каждый элемент которой определяется по формуле:
Fij=D2-Ej*Dj , (где i = 1,2…7; j =1,2…7). (в формуле "2" это степень)
Найдите в этой матрице сумму наибольшего и наименьшего элементов.

Буду очень благодарен

Автор: Fighter 3.4.2006, 00:24
А что такое D^2? Если логически мыслить то из формулы, это массив в квадрате, но что-то мне подсказывает что это не так?

Я буду делать, считая, что в квадрат возводится i-тый элемент массива.
Добавлено @ 00:34
В общем, насколько я понял, я сделал эту задачу так:


Код

uses crt;

type
  mas = array [1..7] of integer;

type
  matrix = array [1..7, 1..7] of integer;

procedure InputArray(var a: mas);
var
  i: integer;
begin
  writeln('Enter array...');
  for i := 1 to 7 do
  begin
    write('Enter ', i, ' element of array: ');
    readln(a[i]);
  end;
end;

procedure CreateMatrix(d,e: mas; var f: matrix);
var
  i,j: integer;
begin
  for i := 1 to 7 do
  begin
    for j := 1 to 7 do
    begin
      f[i,j] := sqr(d[i]) - e[j] * d[j];
    end;
  end;
end;

procedure FindMax(f: matrix; var max: integer);
var
  i,j: integer;
begin
  max := f[1,1];
  for i := 1 to 7 do
  begin
    for j := 1 to 7 do
    begin
      if f[i,j] > max then
        max := f[i,j];
    end;
  end;
end;

procedure FindMin(f: matrix; var min: integer);
var
  i,j: integer;
begin
  min := f[1,1];
  for i := 1 to 7 do
  begin
    for j := 1 to 7 do
    begin
      if f[i,j] < min then
        min := f[i,j];
    end;
  end;
end;

procedure DrawMatrix(f: matrix);
var
  i,j: integer;
  y: integer;
begin
  writeln;
  for i := 1 to 7 do
  begin
    y := WhereY;
    for j := 1 to 7 do
    begin
      gotoxy(j * 6, y);
      if j = 7 then
        writeln(f[i,j])
      else
        write(f[i,j]);
    end;
  end;
end;

var
  d,e: mas;
  f: matrix;
  max, min: integer;
  summ: integer;

begin
  clrscr;
  InputArray(d);
  InputArray(e);
  CreateMatrix(d,e,f);
  DrawMatrix(f);
  FindMax(f, max);
  FindMin(f, min);
  summ := max + min;
  writeln('Min = ', min);
  writeln('Max = ', max);
  writeln('Summ of the MAX and MIN is ', summ);

  readkey;
end.

Автор: cardinal 3.4.2006, 01:36
Цитата(Nikk @ 2.4.2006, 16:44 Найти цитируемый пост)
cardinal,
Может я не понимаю вашего языка.

А правила форума вы понимаете?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)