close

Вход

Забыли?

вход по аккаунту

?

Анализ задачи 5.13

код для вставкиСкачать
Постановка задачи.
В данной действительной матрице найти максимальный по модулю
элемент. Построить новую матрицу, исключив строку и столбец, в которых
находится этот элемент.
Анализ задачи.
В данной задаче дана действительная матрица, следовательно,
элементы матрицы имеют тип double. Требуется найти максимальный по
модулю элемент, и исключить из матрицы стоку и столбец, которые
содержат максимальный элемент. При этом выполняется сдвиг вверх и
вправо соответственно. Для задания матрицы воспользуемся вводом из
файла. Открываем входящие поток строк и читаем из файла matrix.txt. Из
файла поток читает данные типа string. Их следует преобразовать в данные
типа double при помощи parseDouble. Матрица записывается в массив dm.
Далее идет работа непосредственно с массивом. Выполняется поиск
максимального по модулю элемента. Переменной max присваивается
значение первого элемента, а x_max, y_max – координаты. Далее
выполняется перебор всех элементов массива, каждый элемент сравнивается
со значением max, если текущий элемент по модулю больше текущего
значения max, то переменная и ее координаты перезаписываются. После
окончания работы циклов, в переменной внесено значение максимального по
модулю элемента, а в переменных x_max, y_max – его координаты. После
удаляем строку x_max, столбец y_max и выводим модифицированную
матрицу в консоль, а так же в файл out_matrix.txt.
Выбор метода решения.
В данной задаче использован о решение с использованием нескольких
групп вложенных друг в друга циклов. Так же в задаче используются потока
для чтения исходной матрицы из файла matrix.txt.
Алгоритм.
1. читаем файл с матрицей
2. преобразуем string -> double
3. записываем полученную матрицу в массив dm
4. выполняем поиск максимального по модулю элемента
5. записываем в массив new_dm массив dm, исключая строку x_max,
столбец y_max
6. вывод new_dm.
Определение структур, используемых в программировании.
dm – исходная матрица, new_dm – новая матрица, i – счетчик,
использующийся для чтения матрицы из файла, numbers – массив, в
который записывается поток. В последствии, тип его данных
преобразуется в тип double и массив переписывается в массив dm.
max – модуль наибольшего элемента в матрице. x_max, y_max –
координаты наибольшего элемента.
Структура программы. Классы.
В данной программе все данные представлены в одном классе
Matrix. В классе используется один метод с параметрами main(int A, int
B), в котором и происходят все действия для решения задачи.
Методика испытания.
Для проверки используется матрица
3 5 1 12 15
4 6 2 13 17
7 8 9 10 11
20 14 16 25 29
23 24 26 27 33
В ней наибольший элемент самый последний, следовательно
программа должна вычеркнуть последний столбец и последнюю
строку.
3.0 5.0 1.0 12.0
4.0 6.0 2.0 13.0
7.0 8.0 9.0 10.0
20.0 14.0 16.0 25.0
вывод программы подтверждает что программа работает правильно.
Текст программы
import java.io.*;
public class Matrix {
public static void main(int A, int B) throws IOException {
String line;
BufferedReader input = null;
PrintWriter out = null;
try {
input = new BufferedReader(new FileReader("matrix.txt"));
out = new PrintWriter("out_matrix.txt");
int i=0;
double sum=0;
double [][] dm = new double[A][B];
double [][]new_dm = new double[A-1][B-1];
String []numbers;
double max=0;
int x_max=0;
int y_max=0;
for (int s=0; s<A; s++) {
i++;
line=input.readLine();
numbers= line.split("\\s+");
for(int j=0; j<B; j++){
try{
dm[s][j]=Double.parseDouble(numbers[j]);
}
catch(Exception e){}
}
}
for(int q=0;q<A;q++){
for(int w=0;w<B;w++){
if(Math.abs(dm[q][w])>max){
max=dm[q][w];
x_max=q;
y_max=w;
}
}
}
for(int a=0;a<A;a++){
if(a==x_max)
continue;
for(int s=0;s<B;s++){
if(s==y_max)
continue;
new_dm[a][s]=dm[a][s];
}
}
for(int o=0;o<A-1;o++){
for(int j=0;j<B-1;j++){
System.out.print(new_dm[o][j]+" ");
}
System.out.println();
}
}
finally {
if (input != null) {input.close();}
if (out != null) {out.close();}}}}
Документ
Категория
Программирование, Базы данных
Просмотров
16
Размер файла
35 Кб
Теги
анализа, задачи
1/--страниц
Пожаловаться на содержимое документа