Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/23: Рейтинг темы: голосов - 23, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
1

Дана квадратная матрица, удалить строку и столбец матрицы, на пересечении которой находится минимальный элемент

16.05.2012, 08:36. Просмотров 4478. Ответов 20
Метки нет (Все метки)

Доброго времени суток!
Пытаюсь решить задачку, курсовая по информатике. Дана матрица a[N,N] вещественных значений. Удалить строку и столбец матрицы, на пересечении которой находится минимальный элемент.
Дело в том, что препод, объясняя новый материал не закреплял его с нами на компьютерах сразу, ну и естественно трудно писать на языке, если у тебя нету практики. Но я смог все же написать почти всю программу, за исключением самого последнего. Минимальный элемент я нашел, но как теперь написать новую матрицу обходя элементы из столбца и строки в которой содержится минимальный элемент? Пожалуйста подскажите.
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
program Kypcovay6;
const
c=',';
var
A: array [1..10,1..10] of real;
n,i,j: integer;
min:real;
begin
writeln ('Введите размерность матрицы от 1 до 10');
readln (n);
for i:= 1 to n do
for j:= 1 to n do
begin
writeln ('Введите [',i,',',j,'] элемент матрицы');
readln (A [i,j]);
end;
for i:= 1 to n do
begin
for j:= 1 to n do
write (A[i,j]:5:2);
writeln;
end;
min:=a[1,1];
begin
for i:=1 to n do
for j:=1 to n do
 if min>=a[i,j] then min:=a[i,j];
 writeln('Минимальное ',min:2:2);
 end;
begin
for i:=1 to n do
for j:=1 to n do
 if min=a[i,j] then
 begin
 write('a[',i);write('',c);write('',j);writeln(']');
 end;
 end;
readln;
end.
Добавлено через 12 часов 4 минуты
Ну что никто не может помочь, хотя бы подскажите как исключить элементы этих строк и столбцов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2012, 08:36
Ответы с готовыми решениями:

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

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

Дана матрица 5х5. Удалить строку и столбец, на пересечении которого стоит минимальный элемент
Дана матрица 5х5. Удалить строку и столбец, на пересечении которого стоит минимальный элемент....

Дана матрица размером nxn. Обнулить строку и столбец матрицы, на пересечении которых находится её максимальный элемент
Решите, пожалуйста. Я просто не понимаю ничего...

20
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 08:46 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
Uses CRT;
Const n=5;
var a:array[1..n,1..n] of integer;
    i,j,index,undex,min:integer;
begin
     ClrScr;Randomize;
     for i:=1 to n do
     for j:=1 to n do
     begin
          a[i,j]:=Random(21);
          gotoxy(j*5+5,i);
          write(a[i,j]);
     end;
min:=a[1,1];
     for i:=1 to n do
     for j:=1 to n do
     if a[i,j]<min then
     begin
          min:=a[i,j];
          index:=i;
          undex:=j;
     end;
writeln('');
writeln('Min=',min,' i=',index,' j=',undex);
     for i:=1 to n do
     for j:=1 to n do
     if (index<>i) and (undex<>j) then
     begin
          gotoxy(j*5+5,i+10);
          write(a[i,j]);
     end;
end.
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 16:39  [ТС] 3
Спасибо за программу, все работает, но пожалуйста прошу мне пояснить вот этот фрагмент, откуда цифра 5? и 10? атак же оператор gotoxy. Я понял так что ваша матрица вводится рандомными числами, и размер у вас всегда равен 5,а как в моем случае, если у меня размер задается в начале?

Цитата Сообщение от 3a9Ic Посмотреть сообщение
Pascal
1
2
3
4
     begin
          gotoxy(j*5+5,i+10);
          write(a[i,j]);
     end;
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 16:43 4
Про размер никто ничего не говорил Поэтому, использовал константу. Что бы у Вас можно было задавать изменяем
Pascal
1
var a:array[1..99,1..99] of integer;
Константу удаляем. И вместо нее, в коде, пишем:
Pascal
1
2
3
var n:integer
...
write('Введите N=');Read(n);
Далее, все по старинке. Ну и оператор gotoXY(J,I); Это оператор, который перемещает курсор на указанный X и Y, по Рамке (Т.е. Uses CRT). Просто, использую для красивого вывода, или вывода матрицы. gotoXY(J*(размер между цифрами)+(Смещение по Х), i+(Смещение по Y)
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 16:58  [ТС] 5
Ага, понял! Спасибо! Но еще вопрос, у меня получатся так что выходная матрица где-то под предыдущими словами, как мне ее более менее расположить нормально? задать больше смещение по осям? И вообще можно без оператора gotoxy вывести эту матрицу? Если вам не сложно подскажите! Спасибо!

Добавлено через 3 минуты
Я убрал этот оператор, программа работает, выводит матрицу, но выводит ее в строчку, а как сделать чтобы он ее выводил как матрицу?
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
program Kypcovay6;
const
c=',';
var
A: array [1..10,1..10] of real;
n,i,k,l,j: integer;
min:real;
begin
writeln ('Введите размерность матрицы от 1 до 10');
readln (n);
for i:= 1 to n do
for j:= 1 to n do
begin
writeln ('Введите [',i,',',j,'] элемент матрицы');
readln (A [i,j]);
end;
for i:= 1 to n do
begin
for j:= 1 to n do
write (A[i,j]:5:2);
writeln;
end;
min:=a[1,1];
begin
for i:=1 to n do
for j:=1 to n do
 if a[i,j]<min then
 begin
    min:=a[i,j];
    k:=i;
    l:=j;
 end;
 
 writeln('Минимальное ',min:2:2);
 write('a[',k);write('',c);write('',l);writeln(']');
 end;
 for i:=1 to n do
 for j:=1 to n do
 if (k<>i)and(l<>j) then
 begin
 
   write(a[i,j]:10:2);
 end;
 
readln;
end.
Добавлено через 13 секунд
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 17:21 6
Он как раз выводит матрицу, как матрицу. Можно и по-другому, только я не люблю другой способ и почти его не использую. Поэтому, не помню.
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 17:26  [ТС] 7
Вот ввожу данные, размер матрицы любой ну например 2х2 вписываю элементы, 1 2 3 4, и он выдает новую матрицу, должен написать 4, а пишет 1. В чем проблема?
Нашел проблему! Моя ошибка не там определил K и L
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 17:28 8
Как должен, так и пишет. Так как, изначально заносится элемент a[1,1] / a[1,2] / a[2,1] / a[2,2]
Или пишет только 1 значение?
Можно вопрос ещё, какой смысл от:"Const c=',' "
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 17:33  [ТС] 9
Цитата Сообщение от 3a9Ic Посмотреть сообщение
Как должен, так и пишет. Так как, изначально заносится элемент a[1,1] / a[1,2] / a[2,1] / a[2,2]
Или пишет только 1 значение?
Можно вопрос ещё, какой смысл от:"Const c=',' "
Да конечно, при выводе строчки,
Pascal
1
write('a[',i);write('',c);write('',j);writeln(']');
тут нужна запятая, вот она для этого
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 17:35 10
Цитата Сообщение от fenixgaurd Посмотреть сообщение
writeln ('Введите [',i,',',j,'] элемент матрицы');
Тут тоже нужна запятая, ну вы же не вставляете C

И, наверно, проще это вывести в один Write.
Pascal
1
Write('a[',i,' ',',',' ',j,']');
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 17:46  [ТС] 11
А еще вопрос, подскажите, как сделать, например у меня матрица из одинаковых элементов, как это обыграть? Ну вообще нужно закончить программу написанием что все элементы одинаковые и чтобы дальше она не выполнялась.
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 17:49 12
Хм, если они все одинаковые, из кого минимум искать?)
Ну, или в ручную задать все элементы одинаковые (кроме минимума). И добавить вывод в конце. Или Вам нужно, что бы программа работала, до конца?
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 17:54  [ТС] 13
Цитата Сообщение от 3a9Ic Посмотреть сообщение
Хм, если они все одинаковые, из кого минимум искать?)
Ну, или в ручную задать все элементы одинаковые (кроме минимума). И добавить вывод в конце. Или Вам нужно, что бы программа работала, до конца?
В том то и дело если элементы одинаковые, то он не должен искать минимум, а просто сказать, что В матрице все элементы одинаковые и на этом завершить задачу. А если есть хоть 1 отличный, то он должен делать все как положено, найти минимум и удалить строку и столбец.
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 18:01 14
Что-то не могу придумать по умнее, вот так только...
Pascal
1
2
3
4
5
6
7
8
9
10
var k:integer;
....
     for i:=1 to n do
     for j:=1 to n do
     if a[i,j]=min then inc(k);
     if k=n*n then
     begin
          writeln('Âñå ýëåìåíòû îäèíàêîâûå');
          exit;
     end;
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 18:15  [ТС] 15
Посмотрите пожалуйста код, я сделал почти так, но просто у Вас он не выходил из программы, сделал после врайта else но он ругается, не пойму на что, может где то ошибка?
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
program Kypcovay6;
var
A: array [1..10,1..10] of real;
n,i,k,l,j,t:integer;
min:real;
begin
writeln ('Введите размерность матрицы от 1 до 10');
readln (n);
for i:= 1 to n do
for j:= 1 to n do
begin
writeln ('Введите [',i,',',j,'] элемент матрицы');
readln (A [i,j]);
end;
for i:= 1 to n do
begin
for j:= 1 to n do
write (A[i,j]:5:2);
writeln;
end;
 
for i:=1 to n do
for j:=1 to n do
 if a[i,j]=min then inc(t);
 if t=n*n then
   writeln('Все элементы одинаковые');
 else
 begin
 
 min:=a[1,1];
begin
 for i:=1 to n do
 for j:=1 to n do
  if min>=a[i,j] then   min:=a[i,j];
 
 writeln('Минимальное ',min:2:2);
 end;
 begin
 for i:=1 to n do
 for j:=1 to n do
  if min=a[i,j] then
  begin
   writeln('a[',i,'',',','',j,']');
   k:=i;l:=j;
  end;
 
 for i:=1 to n do
 for j:=1 to n do
 if (i<>k) and (j<>l) then
   write(a[i,j]:10:2);
 end;
 end;
readln;
end
Добавлено через 4 минуты
Цитата Сообщение от 3a9Ic Посмотреть сообщение
Что-то не могу придумать по умнее, вот так только...
Pascal
1
2
3
4
5
6
7
8
9
10
var k:integer;
....
     for i:=1 to n do
     for j:=1 to n do
     if a[i,j]=min then inc(k);
     if k=n*n then
     begin
          writeln('Âñå ýëåìåíòû îäèíàêîâûå');
          exit;
     end;
Да, кстати, я просто не знал, оказывается нужно описать как процедуру exit
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 18:31 16
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
program Kypcovay6;
Uses CRT;
var
A: array [1..10,1..10] of real;
n,i,k,l,j,t:integer;
min:real;
begin
ClrScr;
writeln ('Ââåäèòå ðàçìåðíîñòü ìàòðèöû îò 1 äî 10');
readln (n);
for i:= 1 to n do
for j:= 1 to n do
begin
     writeln ('Ââåäèòå [',i,',',j,'] ýëåìåíò ìàòðèöû');
     readln (A [i,j]);
end;
ClrScr;
for i:= 1 to n do
begin
for j:= 1 to n do
    write (A[i,j]:5:2,' ');
    writeln;
end;
 
for i:=1 to n do
for j:=1 to n do
    if a[i,j]=min then inc(t);
    if t=n*n then
    begin
         writeln('Âñå ýëåìåíòû îäèíàêîâûå');
         exit;
    end;
min:=a[1,1];
begin
     for i:=1 to n do
     for j:=1 to n do
         if min>=a[i,j] then min:=a[i,j];
 write('Ìèíèìàëüíîå ',min:2:2,' ');
 end;
 begin
 for i:=1 to n do
 for j:=1 to n do
     if min=a[i,j] then
     begin
          writeln('a[',i,'',',','',j,']');
          k:=i;l:=j;
     end;
 end;
for i:=1 to n do
begin
for j:=1 to n do
    if (i<>k) and (j<>l) then
    begin
         write(a[i,j]:4:2,' ');
    end;
    writeln;
end;
end.
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 19:10  [ТС] 17
Огромное спасибо Вам за помощь, спасибо нажал на всех постах, ибо не жалко когда помогают хорошие люди. А вот блок-схему, есть какие- то программы для их начертания, или в ручную? Вы вот как дружите с ними?
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 19:32 18
Обычно пользуюсь программой:autoshema , но, когда копирнул туда код, программа взбесилась, она согласна его обрабатывать только частями. Поискал в интернете, более мощную, что-то не нашел.
Так как, делать скрины такого кода не целесообразно,Тут можно скачать эту программу, может поможет.
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
16.05.2012, 19:44  [ТС] 19
Спасибо. Да и в правду на код она ругается. Придется чертить в ручную.
0
141 / 129 / 113
Регистрация: 08.04.2012
Сообщений: 245
16.05.2012, 19:56 20
Вбейте по половине программы. Он Вам все от рисует, по-частям.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2012, 19:56

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

Матрица с меню: Удалить строку, в которой находится минимальный элемент матрицы
Написать программу, включающую следующие процедуры: Создать матрицу В(6х6) случайных чисел в...

Удалить из массива строку и столбец, на пересечении которых находится минимальный элемент
Помогите исправить ошибку . Задание :Сформировать двумерный массив. Удалить из него строку и...

Матрица. Найти минимальный элемент и и заполнить единицами строку и столбец, на пересечении которых он находится
Матрица B состоит из 6 строк и 5 столбцов. Найти минимальный элемент и и заполнить единицами...

Удалить из двумерного массива строку и столбец, на пересечении которых находится минимальный элемент
Сформировать двумерный массив .Удалить из него строку и столбец, на пересечении которых находится...

Из двумерного массива удалить строку и столбец на пересечении которых находится минимальный элемент
Из двумерного массива удалить строку и столбец на пересечении которых находится минимальный элемент

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


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

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

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