close

Вход

Забыли?

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

?

Описание МРЗ вариант 6

код для вставкиСкачать
Описание метода решения задач
Вариант 6.
При составлении алгоритма решения поставленной задачи необходимо применять основные принципы алгоритмизации:
1. Выявить исходные данные, результаты, назначить им имена
2. Выбрать метод решения задачи
3. Разбить метод решения задачи на этапы (с учетом возможностей ЭВМ)
4. Изобразить каждый этап в виде соответствующего блока схемы алгоритма и указать стрелками порядок их выполнения
5. В полученной схеме при любом варианте вычислений
- предусмотреть выдачу результатов или сообщения об их отсутствии
- обеспечить возможность перехода после выполнения любой операции к блоку "останов"
Выбирая метод решения задачи необходимо руководствоваться правилами описания метода решения задачи:
- выделить величины, являющиеся исходными для задачи
- разбить процесс решения задачи на этапы, которые известны исполнителю и которые он может выполнить однозначно без пояснений
- указать порядок выполнения этапов
- указать признак окончания процесса решения задачи
- указать результат решения задачи
Разбивая метод решения задачи на этапы необходимо учитывать возможности ЭВМ.
ЭВМ может:
- считывать данные с любого устройства ввода и помещать их в отведенную для них ячейку памяти, операция "Ввод"
- производить вычисления по определенным формулам, операция "Присвоить"
- сравнивать значения двух арифметических или текстовых величин, операция "Сравнить"
- переходить от одного этапа решения задачи к другому, операция "Переход"
- печатать на бумаге или выводить на экран монитора результат решения задачи, операция "Вывод"
При построении блок схемы алгоритма задачи необходимо изобразить указанные операции в виде соответствующей геометрической фигуры:
- операция "Ввод"- трапеция
- операция "Присвоить"- прямоугольник
- операция "Сравнить"- ромб
- операция "Переход"- стрелки
- операция "Вывод"- параллелограмм
и так как задачи на производные типы, то учесть суть построения циклического алгоритма:
1. Вывести три набора формул и условие окончания (повторения) цикла, в том числе:
- рабочие формулы
- законы изменения аргументов (переменных)
- формулы для вычисления начальных значения аргументов (переменных)
2. Изобразить типовую схему алгоритма и разместить в ней все указанные формулы и условие.
Задача №1. Дана действительная квадратная матрица порядка N. Найти наибольший из значений элементов, расположенных ниже главной диагонали.
Описание метода решения задачи
1. Выявляем исходные данные, результаты, назначаем им имена.
Исходные данные: квадратная матрица int mass[10][10] размерность матрицы: int N; Результаты: max - максимальное значение среди элементов матрицы, расположенных ниже главной диагонали
2. Выбираем метод решения задачи, разбиваем на этапы (с учетом возможностей ЭВМ)
Первоначально составим укрупненную схему, а затем подробную для блоков IV, V
Укрупненная схема
I. Подключение всех необходимых заголовочных файлов
II. Глобальные описания переменных int mass[10][10],N, max;
III. Определение размерности 2-го мерного массива IV. Элементы матрицы принимаются как случайные числа, вывод матрицы на экран в виде таблицы
V. Получение необходимого результата и вывод его на экран
IV. Вывод матрицы на экран в виде таблицы
for (int i=0; i<n; i++)
{ for (int j=0; j<n; j++)
{ mass[i][j]=random(50)-10;
cout<<setw(5)<<mass[i][j];
}
cout<<endl;
}
V. 1. Так как алгоритм циклический, то выводим три набора формул и условие окончания (повторения) цикла. - рабочие формулы - нет, ничего не вычисляем
- закон изменения аргументов (переменных): i=i+1, j=j+1
- формулы для вычисления начальных значения аргументов (переменных): i:=0; j=0; max =-999;
- условие окончания цикла: i>n, j>n (повторения i<n, j<n)
2. МРЗ:
* поиск максимального значения среди элементов матрицы, расположенных ниже главной диагонали: цикл обработки массива: используем алгоритм расчета всей матрицы - два цикла подряд, операторные скобки между ними не требуются
[блок присваивания переменным начальных значений]
цикл строк
цикл столбцов
- проверяем находится элемент ниже главной диагонали? if (i>=j) и больше он максимального значения? if (mass[i][j]>max) - это составное условие в программе должно быть записано следующим образом: if ((i>=j) && (mass[i][j]>max)), если Да, то в переменную max записываем элемент массива
* выводим на экран максимальное значение
Программа, реализующая данный алгоритм
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
#include<iomanip.h>
int main()
{
clrscr();
randomize();
int mass[10][10],max,n;
cout<<"Размерность матрицы n="; cin>>n;
printf("Исходная матрица:\n");
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
mass[i][j]=random(50)-10;
cout<<setw(5)<<mass[i][j];
}
cout<<endl;
}
max=-999;
for (i=0; i<n; i++)
for (int j=0; j<n; j++)
if ((i>=j) && (mass[i][j]>max)) max=mass[i][j];
cout<<"max="<<max;
getch();
}
Задача №2. Преобразовать строку, заменив в ней каждую точку многоточием, (...). Количество пробелов между словами не должно превышать одного.
Описание метода решения задачи
1. Выявляем исходные данные, результаты, назначаем им имена.
Исходные данные: исходная строка *str1- объявляется как указатель; переменная-указатель-*tmp, в неё будем записывать начальный адрес новой строки
Результаты: новая строка str2
2. Выбираем метод решения задачи, разбиваем на этапы (с учетом возможностей ЭВМ)
Первоначально составим укрупненную схему, а затем подробную для блока III.
Укрупненная схема
I. Подключение всех необходимых заголовочных файлов
II. Глобальные описания переменных char *str1,*str2=new char,*tmp;
III. Получение необходимого результата и вывод его на экран
III. 1. МРЗ:
* вводим строку (gets(str1); функция считывает строку из stdin и записывает адрес str1, добавляя символ '\0')
* в переменной tmp сохраняем начальный адрес новой строки tmp= str2;
* в цикле "перебора элементов строки" - while(*str1 != '\0'): если не конец строки
- ищем символ '.' - if(*str1=='.')
и, если такой есть, то: в новую строку (*str2) записываем точку (*str2='.'). Увеличиваем адрес переменной str2 на одну ячейку (str2++) и в новую строку (*str2) записываем точку (*str2='.'). Вновь увеличиваем адрес переменной str2 на одну ячейку (str2++) и снова записываем точку по этому адресу (нужно записать три точки вместо одной)
иначе в новую строку переписываем символ из исходной строки - *str2=*str1;
- в теле цикла увеличиваем адрес переменной str1 на одну ячейку (str1++), иначе из цикла не выйдем
- увеличиваем адрес переменной str2 на одну ячейку (str2++) для передвижения по новой строке
* после окончания цикла "перебора элементов строки str1" в новую строку записываем символ конца строки (*str2='\0';)
* вывод результата: - предварительно нужно перейти на начало новой строки - str2=tmp;
- выводим на экран преобразованную строку str2
Программа, реализующая данный алгоритм
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
char *str1,*str2=new char,*tmp;
clrscr();
printf("Введи строку\n");
gets(str1);
tmp=str2;
while(*str1 != '\0')
{
if(*str1=='.') {*str2='.';str2++;*str2='.';str2++;*str2='.';}
else {*str2=*str1; }
str1++;
str2++;
}
*str2='\0';
str2=tmp;
printf("\nпреобразованная строка:%s",str2);
getch();
}
Задача №3. Составить функцию, заменяющую в исходной строке символов все единицы нулями и все нули единицами. Замена должна выполняться , начиная с заданной позиции.
Документ
Категория
Рефераты
Просмотров
20
Размер файла
58 Кб
Теги
описание, вариант, мрз
1/--страниц
Пожаловаться на содержимое документа