1

Тема: Процедури і функції ввод Матриці заміна елементів

Допоможіть вирішити проблему
1. Потрібно ввести матрицю з клавіатури із розміром n (квадратна матриця)
2. Вивести цю матрицю на екран.
3. Замінити всі елементи які дорівнюють 0 на 3
4. Вивести змінену матрицю на екран.
5. Зробити у вигляді процедури

Program proizvedenie;
Type 
   Matrix=array [1..10, 1..10] of integer;
Var 
   A: matrix;
   N, m, i, j: integer;
   P: integer;
Procedure vvod (var m: matrix); 
Var k , h : integer ;
Begin
   For i :=1 to n do 
      For j :=1 to n do 
         read(m[i,j]);
End; 
Procedure print (m: matrix);
Var k, h: integer; 
Begin 
   For i:=1 to n do 
   begin 
      For j:=1 to n do 
         Write (M[i, j]: 4);
      Writeln; 
   end ; 
End ; 

Procedure Print1 (m:matrix);
Begin 
   For i:=1 to n do 
     begin
      For j:=1 to n do
     
       begin 
          if m[i,j]=0 then 
            m[i,j]:=3; 
        end;  
         Write (M[i, j]: 4);
      Writeln; 
   end ; 
End ; 

Begin 
   Writeln ('Vvesty rozmirnist matryci');
   Readln(N); 
   Vvod(a);
   Print(a); 
   Print1(a);
End.

вводю матрицю легко, виводю на екран також, а коли присвоюю матриці елементи 3 то виводить тільки останній стовпчик. Що я роблю не так, допоможіть

2 Востаннє редагувалося ReAl (29.11.2016 15:13:40)

Re: Процедури і функції ввод Матриці заміна елементів

По-перше, зауваження по організації — краще було б мати одну процедуру Print(var m: matrix), яку використовувати для друку, і, наприклад, Modify(var m: matrix, from : integer, to : integer)
Тоді основне тіло виглядало б так

Begin 
   Writeln ('Vvesty rozmirnist matryci');
   Readln(N); 
   Vvod(a);
   Print(a); 
   Modify(a, 0, 3);
   Print(a);
End.

По друге, подивіться уважно на гарно відформатований код з великими відступами

Procedure Print1 (m:matrix);
Begin 
        For i:=1 to n do 
        begin
                For j:=1 to n do
                begin 
                        if m[i,j]=0 then 
                                m[i,j]:=3; 
                end;  
                Write (M[i, j]: 4);
                Writeln; 
        end ; 
End ; 

Тепер видно, чому оператором, який стоїть після внутрішнього циклу, виводиться лише останній стовпчик?

І, до речі, якби відразу було як «по-перше», цієї помилки не було б :)

Подякували: Torbins1

3 Востаннє редагувалося kisilam (29.11.2016 15:22:19)

Re: Процедури і функції ввод Матриці заміна елементів

Перенесіть вивід елемента матриці в операторні дужки

begin 
                if m[i,j]=0 then 
                m[i,j]:=3; 
                Write (M[i, j]: 4);
end;  
         

4

Re: Процедури і функції ввод Матриці заміна елементів

Procedure print1 (m: matrix); 

Begin 
  For i:=1 to n do 
    For j:=1 to n do 
      begin 
        if (m[i,j]=0) then 
          m[i,j]:=9; 
        Write (M[i, j]: 4); 
        writeln; 
      End ; 
end; 

так виводить не матрицю а вектор тобто немає стовпчиків

5

Re: Процедури і функції ввод Матриці заміна елементів

ffpr2015
Якщо вважати End снарядом, то спочатку у вас був недоліт, а тепер - переліт :)

6

Re: Процедури і функції ввод Матриці заміна елементів

Поставив end; між write(m[i,j]); і  writeln;
нічого не дало, все рівно пише в рядок

7

Re: Процедури і функції ввод Матриці заміна елементів

Що в вас не виходить. Ось компільнув під фріпаскалем вашу програму і все добре

8

Re: Процедури і функції ввод Матриці заміна елементів

Ось скрін та код.

Program proizvedenie;
    Type 
       Matrix=array [1..10, 1..10] of integer;
    Var 
       A: matrix;
       N, m, i, j: integer;
       P: integer;
    Procedure vvod (var m: matrix); 
    Var k , h : integer ;
    Begin
       For i :=1 to n do 
          For j :=1 to n do 
             read(m[i,j]);
    End; 
    Procedure print (m: matrix);
    Var k, h: integer; 
    Begin 
       For i:=1 to n do 
       begin 
          For j:=1 to n do 
             Write (M[i, j]: 4);
          Writeln; 
       end ; 
    End ; 
     
    Procedure Print1 (m:matrix);
    Begin 
       For i:=1 to n do 
         begin
          For j:=1 to n do
         
           begin 
              if m[i,j]=0 then 
                m[i,j]:=3; 
             Write (M[i, j]: 4);
             end;
          Writeln; 
       end ; 
    End ; 
     
    Begin 
       Writeln ('Vvesty rozmirnist matryci');
       Readln(N); 
       Vvod(a);
       Print(a); 
       Writeln;
       writeln;
       Print1(a);
    End.
Post's attachments

Знімок з 2016-11-29 17-26-30.png 109.26 kb, 205 downloads since 2016-11-29 

9

Re: Процедури і функції ввод Матриці заміна елементів

kisilam
Дарма ви готовий код виклали. Хлопець усе одно спіткнеться об ці операторні дужки, коли робитиме складніші завдання.

Подякували: ReAl1

10

Re: Процедури і функції ввод Матриці заміна елементів

ReAl написав:

По-перше, зауваження по організації — краще було б мати одну процедуру Print(var m: matrix), яку використовувати для друку, і, наприклад, Modify(var m: matrix, from : integer, to : integer)

Ой! Поставив free pascal і зрозумів, що з часів Turbo pascal 1.0 на Robotron-1715 (Z80 inside!) я все забув (з тих пір .pas як Lingua franca трохи читав, але не писав :) )
Звичайно Modify(var m: matrix; ifrom, ito : integer).

А так все підказали, навіть нецікаво.

11

Re: Процедури і функції ввод Матриці заміна елементів

Torbins написав:

kisilam
Дарма ви готовий код виклали. Хлопець усе одно спіткнеться об ці операторні дужки, коли робитиме складніші завдання.

Код взяв автора, write поставив в ту ж позицію про яку я писав в попередньому повідомленні. Модифікував код лише додатковими пустими рядками між двома функціями виведення матриці. для наочності. Так, що я нічого кардинального не міняв.

12

Re: Процедури і функції ввод Матриці заміна елементів

Дякую Вам люди!!!!