Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Образцы решения задач.
Задача № 1. Задан массив дробных чисел. Найти количество элементов в массиве больших среднего значения элементов массива. Постановка задачи. Для решения данной задачи необходимо использовать типовые алгоритмы: суммирование элементов массива и подсчет количества элементов массива по заданному ключу (среднее значение элементов массива). Входные данные. < Всего> элементов в массиве – n (постоянное значение целого типа). < Массив> значений дробного типа – A (тип – tAr). Выходные данные. < Количество> элементов массива больших среднего – kolvo (целое). Промежуточные данные. < Среднее> значение элементов массива – sred (всегда дробное). Алгоритм. 1. Ввод элементов массива. 2. Найти < Среднее> значение элементов массива: § Найти < Сумму> элементов массива; § < Сумму> разделить на < Всего> элементов в массиве. 3. Найти < Количество> элементов в массиве больше среднего. 4. Вывод < Количество> на печать.
Функциональная структура алгоритма
Текст программы. Const n=30; // всего элементов в массиве Type tAr= array [1..n] of real; // тип массив из n элементов типа real Var A: tAr; // массив значений sred: real; // среднее значение элементов массива kolvo: integer; // количество элементов больших среднего значения procedure vvod(var A: tAr); {ввод элементов массива A – формальный параметр типа tAr, водимый массив (не следует путать с глобальной переменной A: tAr, описанной выше) } Var i: integer; Begin for i: =1 to n do readln(a[i]); end; function summ(A: tAr): real; {алгоритм нахождения суммы элементов массива A – массив из n значений дробного типа Возвращаемое значение – сумма всех элементов массива A } Var i: integer; // счетчик цикла s: real; // сумма значений Begin s: =0; // сначала сумма равна 0 for i: =1 to n do // для каждого i от 1 до n (для каждого элемента) s: =s+A[i]; // добавим i-й элемент к сумме summ: =s; // возвращаем сумму элементов end;
function koll(A: tAr; Key: real): integer; {алгоритм нахождения количества элементов массива удовлетворяющих условию A – массив из n значений дробного типа Key – ключ для поиска значения Возвращаемое значение – количество элементов массива A, больших указанного ключа } Var i, // счетчик цикла kol // количество элементов, удовлетворяющих условию : integer; Begin kol: =0; // сначала 0 for i: =1 to n do //подсчет кол-ва элементов массива > среднего if A[i]> Key then // i-й элемент больше ключа kol: =kol+1; // учли найденный элемент koll: =kol; // вернули количество найденных элементов end;
Begin vvod(A); sred: =summ(A)/n; // нашли сумму элементов массива A и разделили её на количество элементов kolvo: =koll(A, sred); // нашли количество элементов массива A больших значения sred WriteLn(’Количество элементов больших ’, sred, ’ равно ’, kolvo); end.
Задача № 2. Одномерный массив длиной N=40 элементов заполнить случайными числами из диапазона [–25..10]. Составить программу определения минимального из элементов, значения которых лежат в диапазоне [Mn..Mx]. Постановка задачи. Для решения данной задачи необходимо использовать типовые алгоритмы: поиск элемента в массиве по ключу (диапазон [Mn..Mx]); поиск минимального элемента в массиве, который должен находиться в диапазоне [Mn..Mx]. Входные данные. < Всего> элементов в массиве – N (постоянное значение целого типа) Границы допустимых значений элементов массива (постоянные значения): < Минимум> значение Low (тип - целое) < Максимум> значение High (тип - целое) < Массив> целых элементов – A (тип – tAr). Ключ для поиска: < Нижнее> значение Mn (тип - целое). < Верхнее> значение Mx (тип - целое). Выходные данные. Минимальный < Элемент> в массиве – min (тип - целое). Промежуточные данные. < Номер> первого элемента массива из диапазона – ind (тип - целое). Алгоритм. 1. Заполнение < Массива> случайными числами из заданного диапазона [< Минимум>..< Максимум> ]. 2. Нахождение < Номера> первого элемента массива, соответствующего ключу. 3. Поиск < Элемента> массива из заданного диапазона. 4. Вывод < Элемента> на печать. Функциональная структура алгоритма
Текст программы. Сonst Low=-25; //минимум High=10; // максимум n=40; // всего Type tAr= array [1..n] of integer; // структура данных – массив из n значений целого типа Var A: tAr; Mn, Mx, min: integer; ind: integer; procedure vvod(var A: tAr; L, H: integer); {алгоритм заполнение массива случайным числами из диапазона [L..H] A – заполняемый массив L – минимальное значение элементов массива H – максимальное значение элементов массива } Var i: integer; Begin randomize; // инициализируем генератор случайных чисел for i: =1 to n do // для каждого элемента A[i]: =random(abs(L)+abs(H)+1)-L; // генерируем случайное значение и заносим его в элемент end;
function FirstElement(A: tAr; Min, Max: integer): integer; { поиск первого элемента массива входящего в диапазон Min..Max A – заданный массив Min – нижняя граница диапазона Max – верхняя граница диапазона Возвращаемое значение – номер самого первого элемента или -1, если такого элемента нет } Var i, // счетчик цикла (номер обрабатываемого элемента массива) First // номер элемента : integer; Begin First: =-1; for i: =1 to n do if (A[i]> =Min) and (A[i]< =Max) then // i-й элемент лежит в диапазоне First: =i; // нашли соответствующий элемент break // прервали выполнение цикла End poisk: =First; // указали возвращаемое значение end;
function Minimum(A: tAr; Min, Max, First: integer): integer; { поиск минимального элемента входящего в диапазон Min..Max начиная с заданного A – заданный массив Min – нижняя граница диапазона Max – верхняя граница диапазона First – номер первого элемента, соответствующего ключу Возвращаемое значение – минимальный элемент из заданного диапазона } Var i: integer; // счетчик цикла (номер элемента массива) min: integer; // значение минимального элемента Begin min: =A[First]; // за минимальный принимаем первый for i: = First +1 to n do // для каждого элемента if (A[i]> =Min) and (A[i]< =Max) and // элемент принадлежит диапазону (A[i]< min) then // элемент меньше ранее найденного значения min: =A[i]; // запомнили минимальный элемент Minimum: =min end;
begin {головной модуль} // ввод исходных данных vvod(A, Low, High); // заполнили массив Write(’Введите диапазон Min и Max ’); ReadLn(Mn, Mx); // ввели границы диапазона // обработка ind: =FirstElement(A, Mn, Mx); // нашли первый элемент min: =Minimum(A, Mn, Mx, ind); // нашли минимальных элемент // вывод результатов WriteLn(’Минимальное значение равно ’, min); end. Примечание: В Задания для самостоятельного решения. Вариант 1. 1. Одномерный массив А длиной N< =20 заполнить случайными числами из диапазона [–10..55]. Составить программу определения: · первого максимального элемента массива; · количество максимальных элементов в массиве; · всех элементов, кратных 3-м или 5-и. 2. Дан одномерный массив. Переместить нулевые элементы массива в конец, сдвинув остальные элементы влево. 3. Имеются сведения о количестве проданных билетов в 17-ти вагонах поезда. Найти наименее загруженный вагон, учитывая, что количество мест в вагоне зависит от типа вагона: в мягком и купейном вагонах — по 36 мест, а в плацкартном — 46 мест. Вариант 2. 1. Одномерный массив А длиной N< =50 заполнить случайными числами из диапазона [–5..30]. Составить программу определения: · последнего максимального элемента; · на каких позициях находятся максимальные элементы; · сколько элементов массива превосходят по модулю заданное число M? 2. Дан одномерный массив. Переместить нулевые элементы массива в начало, сдвинув остальные элементы вправо. 3. Даны сведения о двухстах абитуриентах: фамилии и оценки, полученные на трех вступительных экзаменах. Напечатать список будущих студентов при условии, что норма приема — 40 человек, а зачисляются абитуриенты, набравшие наибольшую сумму баллов. Вариант 3. 1. Одномерный массив А длиной N< =30 заполнить случайными числами из диапазона [-10..60]. Составить программу определения: · последнего минимального элемента; · на каких позициях находятся минимальные элементы; · есть ли в данном массиве два соседних положительных элемента? Найти номера первой пары. 2. Дан одномерный массив. Переместить минимальные элементы в начало, сдвинув остальные элементы вправо. 3. Известно количество денег у каждого из N учеников, а также стоимость 4 комплексных обедов в школьной столовой. Напечатать сколько каких обедов будет куплено и сколько учеников останутся голодными, если каждый ученик выбирает наиболее дорогой обед, который он может купить. Вариант 4. 1. Одномерный массив А длиной N< =20 заполнить случайными числами из диапазона [–15..80]. Составить программу определения: · первого минимального элемента массива; · количества и суммы минимальных элементов; · есть ли в данном массиве два соседних отрицательных элемента? Найти номера последней пары. 2. Дан одномерный массив. Переместить максимальные элементы в конец, сдвинув остальные элементы влево. 3. Имеются сведения о 40 регионах страны: название региона и информация об уровне безработицы в регионе. Определите три наиболее благополучных и три неблагополучных района. Вариант 5. 1. Одномерный массив А длиной N< =20 заполнить случайными числами из диапазона [–15..-5]. Составить программу определения: · суммы положительных элементов массива; · количества четных элементов массива; · минимального из элементов, значения которых лежат в диапазоне [y1..y2]. 2. Дан одномерный массив. Переместить максимальные элементы в начало, сдвинув остальные элементы вправо. 3. Имеется информация о 100 предприятиях города в виде: название предприятия, число работающих, прибыль. Определить предприятие с максимальной прибылью с учетом количества работающих на нем людей. Вариант 6. 1. Одномерный массив А длиной N< =50 заполнить случайными числами из диапазона [–15..20]. Составить программу определения: · первого отрицательного элемента массива; · суммы четных элементов массива. · количества элементов, значения которых лежат в диапазоне [y1..y2]. 2. Дан одномерный массив. Переместить минимальные элементы в конец, сдвинув остальные элементы влево. 3. Имеются сведения об обеспеченности жильем N работников предприятия: фамилия работника, количество человек в семье, количество кв. метров жилой площади. Также известно количество K новых квартир, которые получает предприятие. Требуется отпечатать список K работников, претендующих на новое жилье, полагая, что у всех работников разное количество кв. метров на человека. Вариант 7. 1. Одномерный массив А длиной N< =40 заполнить случайными числами из диапазона [–25..10]. Составить программу определения: · первого четного элемента массива; · суммы элементов массива значения, которых лежат в диапазоне [y1..y2]; · количества элементов массива больших заданного значения M. 2. Дан одномерный массив. Переместить четные элементы в конец, сдвинув остальные элементы влево. 3. В конкурсе «Мисс Очаровашка» участвуют 100 девушек. Известен балл, набранный каждой девушкой в ходе первого тура конкурса. Определить десять девушек, вышедших во второй тур конкурса. Вариант 8. 1. Одномерный массив А длиной N< =25 заполнить случайными числами из диапазона [–18..10]. Составить программу определения: · первого положительного элемента массива; · максимального среди четных элементов массива; · количества отрицательных элементов массива значения, которых лежат в диапазоне [y1..y2]. 2. Дан одномерный массив. Переместить нечетные элементы в начало, сдвинув остальные элементы вправо. 3. Известно количество голосов, поданных за каждого из 10 кандидатов на пост мэра Челябинска. Выяснить, избран ли мэр, если для избрания требуется набрать более 50 % голосов “за’ или какие два кандидата вошли во второй тур (если никто из кандидатов не набрал 50 % голосов). Вариант 9. 1. Одномерный массив А длиной N< =55 заполнить случайными числами из диапазона [–30..30]. Составить программу: · определить первый элемент массива кратный 5–и; · найти среднее значение максимального и минимального элементов массива; · заменить первые k элементов на противоположные по знаку. 2. Дан одномерный массив. Переместить положительные элементы в конец, сдвинув остальные элементы влево. 3. Известна балансовая стоимость 100 станков завода. Определить десять станков с максимальной балансовой стоимостью, а также вычислить амортизационные отчисления завода, если за каждый станок они составляют 10% его стоимости. Вариант 10. 1. Одномерный массив А длиной N< =40 заполнить случайными числами из диапазона [–20..50]. Составить программу: · определить последний положительный элемент массива кратный 3-м; · заменить максимальный по модулю отрицательный элемент нулем; · найти все индексы отрицательных элементов массива. 2. Дан одномерный массив. Переместить отрицательные элементы в начало, сдвинув остальные элементы вправо. 3. Руководство ведет каждый месяцам учет расходов фирмы. Получена информация за n месяцев. Расставить данные по расходам в порядке в их возрастания. Отчет должен содержать: · Математическую или логическую модель задачи. · Функциональную структуру алгоритма. · Программный код задачи. · Тесты для проверки правильности работы программного кода. Контрольные вопросы: 1. Дайте определение понятию массив. 2. Назовите и охарактеризуйте свойства массива. 3. Какие типы массивов существуют, и чем они отличаются друг от друга? 4. Что такое логическое и физическое представление массива? 5. Как осуществляется доступ к элементу одномерного массива? 6. Опишите одномерный массив, состоящий из 30 элементов целого типа. 7. Дан массив целых чисел {Xi}=1, 2, -9, 0, -34, 7. Чему будет равно значение k? k: =0; for i: =1 to n do if X[i]> 0 then k: =k+1; 8. Если элементы массива D[1..7] равны соответственно 4, 0, 7, 5, 6, 2, 4 то значение выражения D[ D[1] ] + D[ D[3] ] равно... 9. Определите, что будет результатом выполнения фрагмента программы: k: =1; for i: =1 to 10 do if A[i]> A[k] then k: =i; 10. Определите, что будет результатом выполнения фрагмента программы: s: =0; for i: =1 to 10 do if A[i]> s then s: =A[i];
|