Лабораторная работа программирование МЭИ 1 курс 1 семестр. Отчёт. Лабораторная работа 1 Массивы Вариант 14 Задание Дан массив a n
![]()
|
А-07-12 Лабораторная работа №1 Массивы Вариант №14 1. Задание Дан массив A(n). Найти наибольшую из длин отрезков подряд идущих простых чисел. 2. Анализ Необходимо реализовать одномерный массив A(n). Кол-во элементов n и сам массив ввести с клавиатуры. Для решения поставленной задачи необходимо описать функцию primeNumber, которая проверяет, является ли данное число простым. Описать исключения: недопустимое число n, отсутствие простых чисел. Протестировать программу. 3. Разработка 3.1. Модульная структура программы Программа состоит из четырёх функций. Они представлены на схеме 1. main ![]() ![]() getArray getAmount ![]() primeNumber Схема 1. Модульная структура программы. 3.2. Спецификация на программные модули Спецификация каждой функции представлены в таблице 1.
Таблица 1. Спецификация модулей 3.3. Схема алгоритмов Схема алгоритма для функции getAmount показана на схеме 2. начало am=0; amax=0 ![]() i=0; i ![]() ![]() ![]() ![]() a[i] простое am>amax ![]() ![]() ![]() am++ am>amax amax=am ![]() ![]() amax=am amax==0 ![]() ![]() ![]() am=0 сообщение об ошибке ответ ![]() конец Схема 2. Схема алгоритма модуля getAmount 3.4. Реализация Программа написана на языке С++ в среде Microsoft Visual C++ 2005. #include "stdafx.h" #include #include using namespace std; int primeNumber(int ar, int i) //Проверка числа на принадлежность к простым числам { if (ar < 2) { return 0; //Числа 0 и 1 - не простые } else { for (int k = 2; k <= ar-1; k++) { if (ar % k == 0) //если число ar делится без остатка на любое, { //кроме 0, 1 и числа превышающие ar/2, return 0; //то оно не простое break; //прерываем цикл } } return 1; //Возвращаем true, если число простое } } void getArray(int *ar, int n) //Вводим последовательность чисел с клавиатуры { cout << "Массив: \n"; for(int i = 0; i < n; i++) { cin >> ar[i]; } } void getAmount(int *ar, int n) //Находим наибольшее количество подряд идущих чисел { int am = 0; //Количество подряд идушщих чисел int ammax = 0; //Наибольшее количество подряд идущих чисел for (int i = 0; i < n; i++) { if (primeNumber(ar[i], i)) //Если число простое { am++; } else //Если следующее число не простое { if (am > ammax) { ammax = am; } am = 0; } } if (am > ammax) ammax = am; //Если наибольшая цепочка чисел в конце if (ammax == 0) { cout << "Нет простых чисел" << endl; } else { cout << "Кол-во подряд идущих чисел = " << ammax << endl; } } void main() { setlocale(0, "Russian"); //Русский язык int n; //Размермассива int ar[20]; //Сам массив cout << "Введите размер массива: "; cin >> n; if (n > 20 || n < 1) { cout << "Неправильно задан размер массива" << endl; system("pause"); return; } int *array = new int [n]; //Инициализируем память под массив getArray(ar, n); //Выводим последовательность чисел с клавиатуры getAmount(ar, n); //Находим наибольшее количество подряд идущих чисел delete []array; //Освобождаем память system("pause"); return; } 4. Тестирование Проведём тестирование программы. Рассмотрим такие аномалии, как неправильно введённый размер массива и отсутствие простых чисел. 1) Неправильно задан размер массива: ![]() 2) Нет ни одного простого числа: ![]() 3) Есть несколько простых чисел: ![]() 4) Все простые числа: ![]() |