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

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

19.10.2011, 06:57. Просмотров 639. Ответов 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 сразу и последний в виде матрицы, а не просто числа в строчку?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2011, 06:57
Ответы с готовыми решениями:

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

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

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

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

Придумайте выражение, которое с mod, div, сложения, вычитания и умножения
Придумайте выражение, которое с помощью mod, div, сложения, вычитания и умножения:переводит число...

6
SuPeR XaKer
2846 / 1975 / 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
forgergg
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
SuPeR XaKer
2846 / 1975 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
19.10.2011, 08:43 4
метки там вообще не нужны.Да и это плохой тон. А вот на счёт процедур верно.Код заметно сократить можно,написав процедуру + -
0
forgergg
135 / 135 / 29
Регистрация: 18.10.2011
Сообщений: 306
19.10.2011, 08:55 5
Цитата Сообщение от SuPeR XaKer Посмотреть сообщение
метки там вообще не нужны.Да и это плохой тон. А вот на счёт процедур верно.Код заметно сократить можно,написав процедуру + -
Ну про метки я написал так - способ для ленивых ) Все равно уже в программе они использованы и что бы не переписывать =/
0
ivanusevanton
0 / 0 / 0
Регистрация: 12.01.2017
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.
Что теперь не так, не пойму.
0
SuPeR XaKer
2846 / 1975 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
19.10.2011, 10:19 7
везде read замени на readln
0
19.10.2011, 10:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2011, 10:19

Придумайте выражение, которое с помощью mod, div, сложения, вычитания и умножения
Придумайте выражение, которое с помощью mod, div, сложения, вычитания и умножения: Переводит число...

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

выполнение сложения и вычитания в обратном коде в любой системе счисления
Помогите пожалуйста написать программу!!! ОЧЕНЬ НАДО!!! Добавлено через 53 секунды ОЧЕНЬ...


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

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

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