Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
Методические указания.pdf
Скачиваний:
77
Добавлен:
13.02.2015
Размер:
1.2 Mб
Скачать
writeln(s1,s2,s3);
s:=0;
for i:=1 to 10 do s:=s+a[i]; r:=s/10;
n:=0;
for i:=l to 10 do
if a[i]>r then inc(n); writeln(n);
Задача 6. Поиск максимального элемента и подсчет частоты его появления в массиве
mах:=а[1];
for i:=1 to 10 do
if a[i]>max then max:=a[i];
s:=0;
for i:=1 to 10 do
if a[i]=max then inc(s); writeln(s);
Задача 7. Поиск нулевого элемента i:=1:
while (i<=10) and (а[i]<>0) do inc(i); if i>10 then writeln(‘нет’)
else writeln(‘первый 0 стоит на позиции ‘,i);
Задача 8. Поиск отрицательного числа с конца массива i:=10;
while (i>=1) and (a[i]>=0) do dec(i);
if i<l then writeln(‘отрицательных чисел нет’)
else writeln(‘последнее число<0 стоит на позиции ‘,i);
13.4 Стандартная обработка двумерных массивов
Значительное количество практических задач требует обработки не одномерных, а двумерных массивов.
Двумерный массив и его части
Например, рассмотрим двумерный массив из 25 элементов, содержащий 5 строк и 5 столбцов:
5 -2 3 14 11
16
17 |
13 |
1 |
7 |
1 |
|
5 |
-2 |
3 |
14 |
20 |
|
8 |
0 |
9 |
10 |
-4 |
|
3 |
-6 |
3 |
14 |
16 |
|
Компонентами двумерного массива, требующими специальной обработ- |
|||||
ки, могут быть его строки, столбцы и диагонали, например: |
|||||
— |
вторая строка: |
||||
17 |
13 |
1 |
7 |
1 |
|
— главная (первая) диагональ: |
|||||
5 |
13 |
3 |
10 |
16 |
|
— побочная (вторая) диагональ: |
|||||
— |
11 |
7 |
3 |
0 |
3 |
третий столбец: |
|||||
— |
3 |
1 |
3 |
9 |
3 |
и т.д. |
Индексы элементов двумерного массива |
||||||||||
Двумерный массив А из 25 элементов (5 строк и 5 столбцов) имеет такие |
||||||||||
индексы: |
||||||||||
5 |
-2 |
3 |
14 |
11 |
→ |
А[1,1] |
А[1,2] |
А[1,3] |
А[1,4] |
А[1,5] |
17 |
13 |
1 |
7 |
1 |
→ |
А[2,1] |
А[2,2] |
А[2,3] |
А[2,4] |
А[2,5] |
5 |
-2 |
3 |
14 |
20 |
→ |
А[3,1] |
А[3,2] |
А[3,3] |
А[3,4] |
А[3,5] |
8 |
0 |
9 |
10 |
-4 |
→ |
А[4,1] |
А[4,2] |
А[4,3] |
А[4,4] |
А[4,5] |
3 |
-6 |
3 |
14 |
16 |
→ |
А[5,1] |
А[5,2] |
А[5,3] |
А[5,4] |
А[5,5] |
Первый индекс — это номер строки, а второй — номер соответствующего столбца (в некоторых программных продуктах возможна другая трактовка: первый индекс — столбец, а второй — строка).
При обработке в программе всех элементов двумерного массива необходимо писать вложенные операторы FOR:
FOR I:=1 TO 5 DO
FOR J:=1 TO 5 DO … A[I,J] …
Индексы строки и столбца двумерного массива
Рассмотрим в качестве примера индексы второй строки:
А[2,1] А[2,2] А[2,3] А[2,4] А[2,5].
Легко заметить, что первый индекс — номер строки — фиксирован и равен 2 (для 2-й строки), а второй индекс последовательно пробегает значения от 1 до 5. Поэтому в случае необходимости обработки 2-й строки двумерного массива достаточно написать:
17
FOR I:=1 ТО 5 DO … А[2 , I ] …
Переменная I может быть по необходимости заменена любой другой, например М:
FOR M:=1 ТО 5 DO … А[2 , M ] …
Теперь рассмотрим в качестве примера индексы третьего столбца:
А[1,3] А[2,3] А[3,3] А[4,3] А[5,3]
Очевидно, что теперь второй индекс — номер столбца — фиксирован, а первый индекс — номер строки — пробегает последовательно все значения от 1 до 5. Поэтому цикл обработки элементов третьего столбца должен выглядеть так:
FOR I:=1 ТО 5 DO … А[ I , 3 ] …
Индексы диагоналей двумерного массива
Элементы первой диагонали двумерного массива имеют индексы:
А[1,1] А[2,2] А[3,3] А[4,4] А[5,5]
Легко заметить, что индекс строки равен индексу столбца для всех элементов первой диагонали, и потому цикл обработки ее элементов должен выглядеть следующим образом:
FOR I:=1 ТО 5 DO … А[I , I] …
Элементы второй диагонали двумерного массива имеют индексы:
А[1,5] А[2,4] А[3,3] А[4,2] А[5,1]
Нелегко, но можно заметить, что сумма индексов строки и столбца для всех элементов второй диагонали постоянна и равна 6 (для массива 5 x 5; для массива N x N это будет N + 1), и потому цикл обработки элементов второй диагонали должен выглядеть следующим образом:
FOR I:=1 ТО N DO … А[I , N+1-I] …
Перенос простейших алгоритмов на двумерные массивы
Учитывая все вышеизложенное, можно согласиться с методикой переноса алгоритмов с одномерных массивов на двумерные, которая проиллюстрирована на примере алгоритма суммирования элементов:
s:=0; |
{Суммирование элементов} |
for i:=1 to 30 do s:=s+А[i]; |
{одномерного массива А} |
s:=0; |
{Суммирование элементов второй} |
for i:=1 to 5 do s:=s+B[2,i]; |
{строки двумерного массива B} |
s:=0; |
{Суммирование элементов третье- } |
for i:=1 to 5 do s:=s+B[i,3]; |
{го столбца двумерного массива B} |
s:=0; |
{Суммирование элементов первой} |
for i:=1 to 5 do s:=s+B[i,i]; |
(диагонали двумерного массива B} |
s:=0; |
{Суммирование элементов второй} |
for i:=1 to 5 do s:=s+B[i,6-1]; |
{диагонали двумерного массива B} |
s:=0; |
{Суммирование элементов} |
18
for |
i:=1 |
to |
5 |
do |
{двумерного массива B} |
for |
j:=1 |
to |
5 |
do |
s:=s+B[i,j]; |
В чем же заключается эта методика? В замене индексов одномерного массива на индексы соответственно строки, столбца, первой или второй диагоналей или всего двумерного массива. В случае обработки всего двумерного массива необходимо также использовать вложенные операторы FOR.
Другие примеры работы с массивами смотрите в соответствующем разде-
ле.
13.5Отладка и тестирование программ
2.5.1Общие сведения об отладке и тестировании ПО
Отладка программы — это процесс поиска и устранения ошибок в программе, производимый по результатам её прогона на компьютере.[1]
Тестирование (англ. test — испытание) — это испытание, проверка правильности работы программы в целом, либо её составных частей.[1]
Отладка и тестирование — это два четко различимых и непохожих друг на друга этапа:
—при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования;
—в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок.
Тестирование устанавливает факт наличия ошибок, а отладка выясняет ее
причину. В современных программных системах (Visual Studio, Delphi и др.) отладка осуществляется часто с использованием специальных программных средств, называемых отладчиками. Эти средства позволяют исследовать внутреннее поведение программы.
Программа-отладчик обычно обеспечивает следующие возможности:
—пошаговое исполнение программы с остановкой после каждой команды (оператора);
—просмотр текущего значения любой переменной или нахождение значения любого выражения, в том числе, с использованием стандартных функций; также можно установить новое значение переменной;
—установку в программе «контрольных точек»(breakpont), т.е. точек, в которых программа временно прекращает свое выполнение, так что можно оценить промежуточные результаты, и др. Причем прерывание исполнения программы может быть вызвано как достижением точки прерывания, так и при выполнении в этой точке некоторого условия При отладке программ важно помнить следующее:
—в начале процесса отладки надо использовать простые тестовые дан-
19
ные;
—возникающие затруднения следует четко разделять и устранять строго поочередно;
—не нужно считать причиной ошибок машину, так как современные машины и трансляторы обладают чрезвычайно высокой надежностью. Тестовые данные должны обеспечить проверку всех возможных условий
возникновения ошибок:
—должна быть испытана каждая ветвь алгоритма;
—очередной тестовый прогон должен контролировать нечто такое, что еще не было проверено на предыдущих прогонах;
—первый тест должен быть максимально прост, чтобы проверить, работает ли программа вообще;
—арифметические операции в тестах должны предельно упрощаться для уменьшения объема вычислений;
—количества элементов последовательностей, точность для итерационных вычислений, количество проходов цикла в тестовых примерах должны задаваться из соображений сокращения объема вычислений;
—минимизация вычислений не должна снижать надежности контроля;
—тестирование должно быть целенаправленным и систематизированным, так как случайный выбор исходных данных привел бы к трудностям в определении ручным способом ожидаемых результатов; кроме того, при случайном выборе тестовых данных могут оказаться непроверенными многие ситуации;
—усложнение тестовых данных должно происходить постепенно. Пример. Система тестов для задачи нахождения корней квадратного
уравнения a x2 +b x +c =0 представлена в таблице 2:
Таблица 1.4
Номер |
Проверяемый случай |
Коэффициенты |
Результаты |
||||
теста |
a |
b |
c |
||||
1 |
d >0 |
1 |
1 |
-2 |
x1 = 1, x2 = — 2 |
||
2 |
d=0 |
1 |
2 |
1 |
Корни равны: x1 =- 1, x2 = — 1 |
||
3 |
d < 0 |
2 |
1 |
2 |
Действительных корней нет |
||
4 |
a=0, b=0, |
c=0 |
0 |
0 |
0 |
Все коэффициенты равны нулю. |
|
х — любое число. |
|||||||
5 |
a=0, |
b=0, |
c<>0 |
0 |
0 |
2 |
Неправильное уравнение |
6 |
a=0, |
b<>0 |
0 |
2 |
1 |
Линейное уравнение. Один корень: x =- 0,5 |
|
7 |
a <> 0, b <> 0, с = 0 |
2 |
1 |
0 |
x1 = 0, x2 = — 0,5 |
Следует помнить о том, что ошибки могут быть допущены на всех этапах решения задачи — от ее постановки до оформления. Разновидности ошибок и соответствующие примеры приведены в таблице 3:
20
Таблица 1.5 |
|
Вид ошибки |
Пример |
Неправильная постанов- |
Правильное решение неверно сформулированной задачи |
ка задачи |
|
Неверный алгоритм |
Выбор алгоритма, приводящего к неточному или эффективному |
решению задачи |
|
Ошибка анализа |
Неполный учет ситуаций, которые могут возникнуть; логические |
ошибки |
|
Семантические ошибки |
Непонимание порядка выполнения оператора |
Синтаксические ошибки |
Нарушение правил, определяемых языком программирования |
Ошибки при выполне- |
Слишком большое число, деление на ноль, извлечение квадратно- |
нии операций |
го корня из отрицательного числа и т. п. |
Ошибки в данных |
Неудачное определение возможного диапазона изменения данных |
Опечатки |
Перепутаны близкие по написанию символы, например, цифра 1 и |
буквы I, l |
|
Ошибки ввода-вывода |
Неверное считывание входных данных, неверное задание форма- |
тов данных |
Обычно синтаксические ошибки выявляются на этапе трансляции. Многие же другие ошибки транслятору выявить невозможно, так как транслятору неизвестны замыслы программиста.
Отсутствие сообщений о синтаксических ошибках является необходимым, но не достаточным условием, чтобы считать программу правильной.
Примеры синтаксических ошибок:
—пропуск знака пунктуации;
—несогласованность скобок;
—неправильное формирование оператора;
—неверное образование имен переменных;
—неверное написание служебных слов;
—отсутствие условий окончания цикла;
—отсутствие описания массива и т.п.
Существует множество ошибок, которые транслятор выявить не в состоянии, если используемые в программе операторы сформированы верно. Приведем примеры таких ошибок.
Логические ошибки:
—неверное указание ветви алгоритма после проверки некоторого условия;
—неполный учет возможных условий;
—пропуск в программе одного или более блоков алгоритма.
Ошибки в циклах:
—неправильное указание начала цикла;
—неправильное указание условий окончания цикла;
21
—неправильное указание числа повторений цикла;
—бесконечный цикл.
Ошибки ввода-вывода; ошибки при работе с данными:
—неправильное задание типа данных;
—организация считывания меньшего или большего объёма данных, чем требуется;
—неправильное редактирование данных.
Ошибки в использовании переменных:
—использование переменных без указания их начальных значений;
—ошибочное указание одной переменной вместо другой.
Ошибки при работе с массивами:
—массивы предварительно не обнулены;
—массивы неправильно описаны;
—индексы следуют в неправильном порядке. Ошибки в арифметических операциях:
—неверное указание типа переменной (например, целочисленного вместо вещественного);
—неверное определение порядка действий;
—деление на нуль;
—извлечение квадратного корня из отрицательного числа;
—потеря значащих разрядов числа.
Все эти ошибки обнаруживаются с помощью тестирования.
22
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
0 / 0 / 0 Регистрация: 16.06.2012 Сообщений: 37 |
|
1 |
|
Определить количество элементов значение которых больше среднего арифметического всех элементов18.07.2012, 08:52. Показов 6699. Ответов 1
пределить количество элементов значение которых больше среднего арифметического всех элементов
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
18.07.2012, 08:52 |
1 |
Дмитрий1988 5 / 5 / 1 Регистрация: 12.07.2012 Сообщений: 13 |
||||
18.07.2012, 09:23 |
2 |
|||
Решение
2 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
18.07.2012, 09:23 |
2 |
Формулировка задачи:
Составить программы, находящую в данном массиве:
количество элементов, больших среднего арифметического всех его элементов.
Код к задаче: «Найти количество элементов массива, больших среднего арифметического»
textual
Листинг программы
// Найти в массиве количество элементов, больших среднего арифметического всех его элементов. const n=1000; var a:array[1..n] of integer; k,l,m:integer; i:integer; begin writeln('Введите количество элементов массива: '); readln(m); writeln('Введите массив: '); for i:=1 to m do readln(a[i]); for i:=1 to m do begin k:=k+a[i]; k:=k div m; end; for i:=1 to m do if a[i]>k then inc(l); writeln('Количество элементов, больших среднего арифметического всех его элементов: ',' ',l); end.
Задан массив из n целых чисел. Найти сумму и количество чисел, больших среднего арифметического элементов массива.
Входные данные
В первой строке записано число n. В следующей строке записано n целых чисел. Все числа не превосходят по модулю 100.
Выходные данные
Вывести сумму и количество чисел, больших среднего арифметического элементов массива.
Алгоритм решения задачи
- В цикле суммируем все элементы массива;
- Находим среднее арифметическое;
- В цикле считаем количество элементов больших среднего арифметического и их сумму.
Решение
using System;
class Program
{
static void Main(string[] args)
{
var n = Convert.ToInt32(Console.ReadLine());
var array = Array.ConvertAll(Console.ReadLine().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries), s => int.Parse(s));
int sum1 = array[0];
for (int i = 1; i < n; i++)
{
sum1 += array[i];
}
double average = sum1 / (double)n;
var count = 0;
var sum2 = 0;
foreach (var current in array)
{
if (current > average)
{
count++;
sum2 += current;
}
}
Console.WriteLine("{0} {1}", sum2, count);
}
}
Смотрите также:
Если у вас есть диапазон значений на листе, и вы хотите подсчитать ячейки выше / ниже определенного значения или выше / ниже среднего значения диапазона, как вы можете быстро их подсчитать? В Excel для этого можно использовать формулу СЧЁТЕСЛИ.
Подсчитайте ячейки выше / ниже среднего
Подсчитайте ячейки выше / ниже определенного значения
Подсчитайте ячейки выше / ниже среднего
Здесь у вас есть диапазон значений на листе, как показано на снимке экрана, и теперь вам нужно подсчитать значения выше или ниже среднего в этом диапазоне.
Выберите пустую ячейку, например Ячейку C6, введите эту формулу = СЧЁТЕСЛИ (A1: C5; «>» & СРЕДНЕЕ (A1: C5)) (диапазон A1: C5 указывает диапазон, в котором вы хотите подсчитать количество ячеек выше среднего, вы можете изменить его по своему усмотрению) и нажмите Enter кнопку на клавиатуре. Смотрите скриншот:
Функции: Если вы хотите подсчитать количество ячеек ниже среднего, введите эту формулу = СЧЁТЕСЛИ (A1: C5; «<» & СРЕДНЕЕ (A1: C5)) (диапазон A1: C5 указывает диапазон, в котором вы хотите подсчитывать ячейки ниже среднего, вы можете изменить его по своему усмотрению).
Подсчитайте ячейки выше / ниже определенного значения
Если вы просто хотите подсчитать ячейки выше или ниже определенного значения, в этом случае я хочу подсчитать ячейки выше числа 50.
Выберите пустую ячейку, например Ячейку C6, введите эту формулу = СЧЁТЕСЛИ (A1: C5; «> 50») (диапазон A1: C5 указывает диапазон, в котором вы хотите подсчитать ячейки выше указанного значения 50, число 50 соответствует критерию, вы можете изменить их по своему усмотрению) и нажмите Enter кнопку на клавиатуре. Смотрите скриншот:
Совет: если вы хотите подсчитать количество ячеек ниже определенного значения, введите эту формулу = СЧЁТЕСЛИ (A1: C5; «<50»)(диапазон A1: C5 указывает диапазон, в котором вы хотите посчитать ячейки ниже указанного значения, число 50 соответствует критерию, вы можете изменить их по своему усмотрению).
Относительные статьи:
- Подсчитайте / суммируйте ячейки больше, чем число в Excel
Комментарии (0)
Оценок пока нет. Оцените первым!