Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ivanusevanton
1

Выполнение операций сложения, вычитания и умножения над матрицами целых чисел

19.10.2011, 06:57. Просмотров 821. Ответов 6
Метки нет (Все метки)

Вобщем нужно разработать проект, который обеспечивает выполнение операций сложения, вычитания и умножения над матрицами целых чисел. Выбор выполняемой операции осуществляет пользователь. Программу естественно нужно написать на Pascal'е. Вот что у меня получилось:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
program matrix;
uses crt;
var
 a,b,s: array [1..20,1..20] of integer;
 k,m,n,i,j,p:integer; op:char; label p1,p2,p3;
begin
 clrscr;
 write('Vvedite razmernost matric (n*m):');
 readln(n,m);
  begin
   writeln('Vvedite matrici:');
   writeln(' Pervaya:');
   for i:=1 to n do
     for j:=1 to m do
           read(a[i,j]);
   writeln;
   writeln(' Vtoraya:');
   for i:=1 to n do
     for j:=1 to m do
      read(b[i,j]);
  end;
write('Operaciya: '); readln(op);
case op of
'+':goto p1;
'-':goto p2;
'*':goto p3; else write('Oshibka!'); end;
p1:writeln;
   writeln;
   writeln('Summa: ');
   for i:=1 to n do
    begin
    writeln;
    for j:=1 to m do
     begin
      s[i,j]:=a[i,j]+b[i,j];
      write(s[i,j],' ');
     end;
   end;
p2:writeln;
   writeln;
   writeln('Paznost: ');
   for i:=1 to n do
    begin
     writeln;
     for j:=1 to m do
     begin
      s[i,j]:=a[i,j]-b[i,j];
      write(s[i,j],' ');
     end;
   end;
p3:writeln;
   writeln;
   writeln('Proizvedenie: ');
   for i:=1 to n do
   for j:=1 to m do
    begin
    s[i,j]:=0;
    for k:=1 to n do
    s[i,j]:=s[i,j]+a[i,k]*b[k,j];
    write(s[i,j],' ');
    end;
readkey;
end.
А теперь вопрос. Как исправить то, чтобы программа выдавала именно тот ответ который относится к введенной операции, а не все 3 сразу и последний в виде матрицы, а не просто числа в строчку?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2011, 06:57
Ответы с готовыми решениями:

Выполнение операций сложения, вычитания и умножения над матрицами целых чисел
Нужно разработать прогу, которая обеспечивает выполнение операций сложения, вычитания и умножения...

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

Выполнение операций сложения, вычитания и умножения матриц
Нужно создать программу для экзамена! Задание: Напишите программу, выполняющую операции...

Перегрузка операций сложения/умножения вычитания 16-ричных чисел
Выполнить перезагрузку перечисленных операций, закрепив за ними соответствующий функциональный...

6
2853 / 1982 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
19.10.2011, 08:08 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
uses crt;
var a,b,s: array [1..20,1..20] of integer;
    k,m,n,i,j,p:integer;
    op:char;
begin
clrscr;
write('Vvedite razmernost matric (n*m):');
readln(n,m);
writeln('Vvedite matrici:');
writeln(' Pervaya:');
for i:=1 to n do
  for j:=1 to m do
    read(a[i,j]);
writeln;
writeln(' Vtoraya:');
for i:=1 to n do
  for j:=1 to m do
    read(b[i,j]);
repeat
writeln;
write('Operaciya: ');
readln(op);
case op of
'+':begin
     writeln('Summa: ');
     for i:=1 to n do
      begin
       writeln;
       for j:=1 to m do
        begin
         s[i,j]:=a[i,j]+b[i,j];
         write(s[i,j],' ');
        end;
      end;
    end;
 '-':begin
      writeln('Paznost: ');
      for i:=1 to n do
       begin
        writeln;
        for j:=1 to m do
         begin
          s[i,j]:=a[i,j]-b[i,j];
          write(s[i,j],' ');
         end;
       end;
     end;
'*':begin
     if m<>n then
     begin
      writeln('Proizvedenie: ');
      for i:=1 to n do
       begin
        for j:=1 to m do
         begin
          s[i,j]:=0;
           for k:=1 to n do
            s[i,j]:=s[i,j]+a[i,k]*b[k,j];
          write(s[i,j],' ');
         end;
        writeln;
       end;
     end
     else write('×èñëî ñòîëáöîâ ïåðâîé ìàòðèöû íå ðàâíî ÷èñëó ñòðîê âòîðîé!')
    end
    else write('Îøèáêà íåò òàêîãî äåéñòâèÿ.');
end;
until not(op in ['+','*','-']);
readkey;
end.
просто исправил.Особо не глядел программу.Размерность лучше вводить для каждой матрицы отдельно,а в вашем случае операция * никогда не будет выполняться.
0
135 / 135 / 29
Регистрация: 18.10.2011
Сообщений: 306
19.10.2011, 08:25 3
Можно добавить выходные метки тип
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
p1:writeln;
   writeln;
   writeln('Summa: ');
...
      s[i,j]:=a[i,j]+b[i,j];
      write(s[i,j],' ');
     end;
   end;
goto endL; {Тут выход из блока на конечную метку}
p2:writeln;
   writeln;
   writeln('Paznost: ');
   for i:=1 to n do
....
endL:
end.
Еще можно для каждой операции написать свою процедуру и вставить в кейс только имена процедур.

Pascal
1
2
3
4
5
6
7
...
case op of:
'-': diff(a,b);
'+': sum(a,b);
'*': multiplic(a,b);
end;
...
И последний вариант - записать все в кейс

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
case op of:
'-': begin
...
{Вычитаем}
...
end;
'+': begin
...
{Суммируем}
...
end;
'*': begin
...
{Умножаем}
...
end;
end;
...
Вывод матрицы(как-то так) :
Pascal
1
2
3
4
5
for i:=0 to n do begin
 for j:=0 to m do
   write(matrix[i,j]:2);
 writeln;
end;
0
2853 / 1982 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
19.10.2011, 08:43 4
метки там вообще не нужны.Да и это плохой тон. А вот на счёт процедур верно.Код заметно сократить можно,написав процедуру + -
0
135 / 135 / 29
Регистрация: 18.10.2011
Сообщений: 306
19.10.2011, 08:55 5
Цитата Сообщение от SuPeR XaKer Посмотреть сообщение
метки там вообще не нужны.Да и это плохой тон. А вот на счёт процедур верно.Код заметно сократить можно,написав процедуру + -
Ну про метки я написал так - способ для ленивых ) Все равно уже в программе они использованы и что бы не переписывать =/
0
ivanusevanton
19.10.2011, 09:55 6
Лучший ответ Сообщение было отмечено как решение

Решение

Сделал все в case и программа перестала вообще работать:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
program matrix;
uses crt;
var
 a,b,s: array [1..20,1..20] of integer;
 k,m,n,i,j,p:integer; op:char;
begin
 clrscr;
 write('Vvedite razmernost matric (m*n):');
 readln(m,n);
  begin
   writeln('Vvedite matrici:');
   writeln(' Pervaya:');
   for i:=1 to n do
     for j:=1 to m do
           read(a[i,j]);
   writeln;
   writeln(' Vtoraya:');
   for i:=1 to n do
     for j:=1 to m do
      read(b[i,j]);
  end;
write('Operaciya: '); readln(op);
case op of
'+':begin
    writeln;
    writeln;
    writeln('Summa: ');
    for i:=1 to n do
     begin
     writeln;
     for j:=1 to m do
      begin
       s[i,j]:=a[i,j]+b[i,j];
       write(s[i,j],' ');
      end;
    end;
    end;
'-':begin
    writeln;
    writeln;
    writeln('Paznost: ');
    for i:=1 to n do
     begin
      writeln;
      for j:=1 to m do
      begin
       s[i,j]:=a[i,j]-b[i,j];
       write(s[i,j],' ');
      end;
    end;
end;
'*':begin
    writeln;
    writeln;
    writeln('Proizvedenie: ');
    for i:=1 to n do
    for j:=1 to m do
     begin
     s[i,j]:=0;
     for k:=1 to n do
     s[i,j]:=s[i,j]+a[i,k]*b[k,j];
     write(s[i,j],' ');
     end;
     end;
else write('Oshibka!'); end;
readkey;
end.
Что теперь не так, не пойму.
2853 / 1982 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
19.10.2011, 10:19 7
везде read замени на readln
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2011, 10:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Класс для выполнения операций сложения, вычитания и умножения комплексных чисел
Условие: Составить описание класса для представления комплексных чисел. Обеспечить выполнение...

Программа умножения двух целых чисел с использованием команд сложения, вычитания, сдвига
Программа умножения двух целых чисел с использованием команд сложения, вычитания, сдвига. (TASM) ...

Определить количество операций сложения, вычитания и умножения в выражении
Помогите пожалуйста решить задачу по программированию в ТР7 Определить общее колличество...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.