close

Вход

Забыли?

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

?

Задача 1 (2)

код для вставкиСкачать
Задача №1. Условие задачи. Дана действительная матрица размера n х m в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.
Описание метода решения задачи
1. Выявляем исходные данные, результаты, назначаем им имена.
Исходные данные: квадратная матрица double mas [10][10] размерность матрицы: int n,m; Результаты: новая матрица, элементы которой - результат деления всех элементов исходной матрицы на ее наибольший по модулю элемент
2. Выбираем метод решения задачи, разбиваем на этапы (с учетом возможностей ЭВМ)
Первоначально составим укрупненную схему, а затем подробную для блоков IV, V
Укрупненная схема
I. Подключение всех необходимых заголовочных файлов
II. Глобальные описания переменных double mas [10][10], max; int n,m;
III. Определение размерности 2-го мерного массива IV. Элементы матрицы принимаются как случайные числа, вывод матрицы на экран в виде таблицы
V. Получение необходимого результата и вывод его на экран
IV. Вывод матрицы на экран в виде таблицы
for (int i=0; i<n; i++)
{ for (int j=0; j< m; j++)
{ mass[i][j]=random(50)-25;
cout<<setw(5)<<mas [i][j];
}
cout<<endl;
}
V. 1. Так как алгоритм циклический, то выводим три набора формул и условие окончания (повторения) цикла. - рабочие формулы - нет, ничего не вычисляем
- закон изменения аргументов (переменных): i=i+1, j=j+1
- формулы для вычисления начальных значения аргументов (переменных): i:=0; j=0; max =-999;
- условие повторения цикла: i<n, j< m
2. МРЗ:
* поиск максимального значения среди элементов матрицы: используем алгоритм расчета всей матрицы - два цикла подряд, операторные скобки между ними не требуются
[блок присваивания переменным начальных значений]
цикл строк
цикл столбцов
- проверяем модуль элемента массива больше максимального значения? if (abs(mas[i][j])>max), если Да, то в переменную max записываем это значение
* выводим на экран максимальное значение (для проверки правильности решения задачи)
* вывод результата
* так как элементы массива - значения типа double, то прежде чем выводить их на экран, необходимо указать количество знаков после точки (оператор указывается до цикла cout<<setprecision(2);)
* выводим на экран измененный массив - mas[i][j]/мах;
Блок - схема задачи № 1
Программа, реализующая данный алгоритм
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
#include<iomanip.h>
int main()
{
clrscr();
randomize();
double mas[10][10],max; int n,m;
cout<<"Размерность массива n="; cin>>n;
cout<<"Размерность массива m="; cin>>m;
printf("Исходная матрица:\n");
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
mas[i][j]=random(50)-25;
cout<<setw(5)<<mas[i][j];
}
cout<<endl;
}
max=-999;
for (i=0; i<n; i++)
for (int j=0; j<m; j++)
if (abs(mas[i][j])>max) max=abs(mas[i][j]);
cout<<setw(9)<<"модуль max="<<max;
cout<<endl;
printf("результат:\n");
cout<<setprecision(2);
for (i=0; i<n; i++)
{
for (int j=0; j<m; j++)
cout<<setw(8)<<mas[i][j]/max;
cout<<endl;
}
getch();
}
Документ
Категория
Рефераты
Просмотров
54
Размер файла
21 Кб
Теги
задачи
1/--страниц
Пожаловаться на содержимое документа