Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.12.2015, 12:25   #1
_Marchel_
Пользователь
 
Регистрация: 14.11.2015
Сообщений: 17
Репутация: 10
По умолчанию Квадратная матрица

Задана матрица X[N,N], где N<=15. В каждом столбце матрицы поменять местами минимальный элемент и элемент главной диагонали. Преобразованную матрицу вывести на экран.

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

Код:
program ABC;
const Nmass=15;
var X:array[1..Nmass,1..Nmass] of integer;
 N,min,i,j,z: integer;
begin
 cls;
 //ручной ввод массива
 writeLn('Введите число элементов в массиве X');
 readLn(N);
 writeLn('Вводим элементы массива X:');
 for i:=1 to N do
 for j:=1 to N do
 begin
 write('X[',i,',',j,']=');
 readLn(X[i,j]);
 end;
 //вывод массива до измененния 
 
 writeLn('Исходный массив X:');
 for i:=1 to N do
 begin
 for j:=1 to N do
 write(X[i,j]:5);
 writeLn;
 end;
 // замена элементов
 For j:=1 to n do
 begin
  min:=9999;
 for i:=1 to n do
 If x[i,j] < min then
 begin
 min:=x[i,j];
 X[j,j]:=min;
 end;
 end;
 //вывод массива поле измененния
 writeLn;
 writeLn('массив X после изменения:');
 for i:=1 to N do
 begin
 for j:=1 to N do
 write(X[i,j]:5);
 writeLn;
 end;
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 12.12.2015 в 12:28.
_Marchel_ вне форума   Ответить с цитированием
Старый 12.12.2015, 12:46   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,720
Репутация: 5617
По умолчанию

не, не так..

попробуйте такой код:
Код:
  // замена элементов
 For j:=1 to n do
 begin
   // поиск минимального элемента в столбце
   minRowIndex:=1;
   for i:=2 to n do
     If X[i,j] < X[minRowIndex,j] then minRowIndex:=i;

   //обменяем элементы местами
   tempX := X[j,j];
   X[j,j] := X[minRowIndex,j];
   X[minRowIndex,j] := tempX;
  
 end;

не забудьте в var описать переменную minRowIndex типа Integer
и переменную tempX такого же типа, как элементы массива X (в данном случае, тоже типа Integer)


если что-то непонятно, то спрашивайте.
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 12.12.2015, 12:54   #3
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,665
Репутация: 1096
По умолчанию

надо не только MIN искать, но и помнить его позицию J,I
Код:
If x[i,j] < min then
 begin
    min:=x[i,j];
    mini:=i;minj:=j;
 end;
    x[j,j]      :=x[j,j]+x[mini,minj];
    x[mini,minj]:=x[j,j]-x[mini,minj];
    x[j,j]      :=x[j,j]-x[mini,minj];
upd. minj=j полюбому. значит вместо minj пишем j
__________________
Mailto: media.project@ukr.net

Последний раз редактировалось Aleksandr H.; 12.12.2015 в 12:57.
Aleksandr H. вне форума   Ответить с цитированием
Старый 12.12.2015, 13:03   #4
_Marchel_
Пользователь
 
Регистрация: 14.11.2015
Сообщений: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не, не так..

попробуйте такой код:
Код:
  // замена элементов
 For j:=1 to n do
 begin
   // поиск минимального элемента в столбце
   minRowIndex:=1;
   for i:=2 to n do
     If X[i,j] < X[minRowIndex,j] then minRowIndex:=i;

   //обменяем элементы местами
   tempX := X[j,j];
   X[j,j] := X[minRowIndex,j];
   X[minRowIndex,j] := tempX;
  
 end;

не забудьте в var описать переменную minRowIndex типа Integer
и переменную tempX такого же типа, как элементы массива X (в данном случае, тоже типа Integer)


если что-то непонятно, то спрашивайте.
спасибо большое, всё работает, очень помогли !

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
надо не только MIN искать, но и помнить его позицию J,I
Код:
If x[i,j] < min then
 begin
    min:=x[i,j];
    mini:=i;minj:=j;
 end;
    x[j,j]      :=x[j,j]+x[mini,minj];
    x[mini,minj]:=x[j,j]-x[mini,minj];
    x[j,j]      :=x[j,j]-x[mini,minj];
upd. minj=j полюбому. значит вместо minj пишем j
большое спасибо, возьму на заметку !

Последний раз редактировалось Stilet; 12.12.2015 в 17:09.
_Marchel_ вне форума   Ответить с цитированием
Старый 12.12.2015, 13:11   #5
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,665
Репутация: 1096
По умолчанию

Serge_Bliznykov, подскажите такой момент: массив Х - integer, заполняю его, например,
Код:
a[i,j]:=10000+random(500)
тогда код ТС не будет работать из-за строки
Код:
min:=9999;
. Для обхода етого случая надо min приcваивать не 9999, а значение первого елемента столбца j. Вопрос: почему у меня получилось такое большое число (см скрин)? или проблема не в
Код:
 min:=a[1,j]
Изображения
 
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 12.12.2015, 14:02   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,873
Репутация: 6688
По умолчанию

mini тоже начальное значение нужно - минимум может быть в первой строке
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 12.12.2015, 14:20   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,720
Репутация: 5617
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
mini тоже начальное значение нужно - минимум может быть в первой строке
опередили!

всё так.
в вашем случае мало написать
Цитата:
Код:
min:=a[1,j];
нужно
Код:
mini:=1;
min:=a[1,j];
но вообще, я бы предложил значение min вообще не хранить.
Какой в этом смысл, если у Вас есть переменная mini, где находится индекс минимального значения?!
Выбросите min и вместо неё пишите X[mini,j]

смотрите, например, мой пример выше...
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 12.12.2015, 14:57   #8
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,873
Репутация: 6688
По умолчанию

Попробовал на Д7, там еще выпендреж компилятора с оптимизацией цикла в отладке. Обмен так сделать и все будет Ok
Код:
    k:=x[j,j];
    x[j,j]:=x[mini,j];
    x[mini,j]:=k;
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 12.12.2015, 16:19   #9
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,665
Репутация: 1096
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Попробовал на Д7, там еще выпендреж компилятора с оптимизацией цикла в отладке. Обмен так сделать и все будет Ok
Код:
    k:=x[j,j];
    x[j,j]:=x[mini,j];
    x[mini,j]:=k;
это классика обмена, а я решил выделаться и без вспомогательной переменной обойтись "криатифф низащитан"
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
квадратная матрица C/C++ vadimc Помощь студентам 1 02.12.2013 10:54
Квадратная матрица MrRifleman Общие вопросы C/C++ 1 02.04.2012 21:02
Квадратная матрица SVing Паскаль 7 13.12.2011 00:58
Квадратная матрица D|Frost| Общие вопросы C/C++ 4 05.07.2011 16:39
квадратная матрица Tata4ka Помощь студентам 2 02.11.2010 14:47


10:26.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.