Лабораторная работа программирование МЭИ 1 курс 1 семестр. Отчёт. Лабораторная работа 1 Массивы Вариант 14 Задание Дан массив a n
Скачать 461.13 Kb.
|
А-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) Все простые числа: |