Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Разработка текста программы




В начале текста программы включаем в него файлы, содержащие описания тех функций, к какимбудем обращаться:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

В файле stdіo.h описания функций стандартного ввода-вывода, в файле std lib.h — функции генерации случайных чисел. В описании функции randomіze () нашли примечание, что она является макросом, который обращается к функции tіme (), следовательно, перед файлом std lib.h в программу должен быть включен файл time.h.

массив должен размещаться в статической памяти. Еслиобъявим массив до открытия тела главной функции, то он будет размещен именно в статической памяти. Поэтому далее у нас идет объявление массива.

int Ar[100];

Далее ставим заголовок главной функции maіn и открываем ее тело:

int main(void){

Главная функция начинается с объявления остальных переменных программы см. п.5.2.

Кодовая часть программы начинается с обращения к функции инициализации датчика случайных чисел (блок 2):

randomize(100);

Далее организуем простой цикл со счетчиком (блок 3), в каждой итерации которого в следующий элемент массива записывается случайное число (блок 4). Обращение к функции rand () возвращаетчисло в пределах 0–100; вычитая из него 50,приводим его к диапазону –50 — +50.

for (i=0; i<100; Ar[i++]=random(101)-50);

Заполненный таким образом массив в цикле выводим на экран (блок 5). Формат вывода каждого элемента — %3d — обеспечивает отображение числа из двух цифр со знаком. Между числами задаеv еще два пробела, таким образом, каждый элемент занимает 5 позиций, а в одной строке экрана разместится целое число (16) элементов, что обеспечит удобное представление массива.

printf(" Начальныймассив:\n");
for (i=0; i<100; printf("%3d ",Ar[i++]));
putchar('\n');
putchar('\n');

Далее идет заголовок цикла перебора массива (блок 7), в котором также присваиваем начальное значение счетчику nn (блок 6):

for (nn=i=0; i<100; i++) {

Все тело цикла состоит из одного условного оператора. В этом операторе проверяем (блок 8) знак i -го элемента массива:

if (Ar[i]<0)

Если это условие — истина, то проверяем, не равен ли 0 счетчик элементов последовательности nn (блок 9):

if (!nn)

При выполнении этого условия выполняется ряд действий (блок 10), которыеберем в операторные скобки:

{ib=i; av=Ar[i]; nn=1;}

Если же условие ложно, то выполняется сложный оператор (блок 11):

else { av+=Ar[i]; nn++; }

Если же элемент положительный, то выполняется часть else первого условного оператора, в которой анализируется nn — нет ли у нас необработанной отрицательной последовательности (блок 12):

else if (nn) {

Если есть необработанная последовательность, выполняем усреднение значения av (блок 13):

av/=nn;

и организуем цикл с параметром j, который изменяется от іb до і–1 (блок 14):

for (j=ib; j<i; j++)

В каждой итерации этого цикла j -й элемент массива сравнивается с средним значением (блок 15) и, если он больше, заменяется на среднее значение (блок 16). Это реализуется одним условным оператором:

if (Ar [ j ]< av) Ar [ j ]= av;

При выходе из цикла записываем 0 в счетчик nn (блок 17):

nn=0;

На этом заканчивается и внешний цикл.

Несколько операторов, которые следуют после выхода из цикла (блок 18), обеспечивают обработку последней последовательности и в основном являются копией тех операторов, которые реализуют блоки 12–17. Разница состоит в том, что тутвнесли усреднение в начальное действие цикла и убрали присваивание nn =0, т.к. значение nn больше не понадобится.

Операторы вывода массива-результата — копия вывода начального массива.

Полный текст программы приведен ниже.

/***************************************************/
/* Р f бота c ма сс ивами */
/* Пример р е шения 1. */
/***************************************************/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int Ar[100]; /* массив, который обрабатывается*/
int main(void)
{ int i,j; /* индексы в массиве */
int av; /* среднее значение */
int nn; /* количество эл-тов в последовательности */
int ib; /* индекс начала последовательности */
randomize(); /* ініціалізація rand */
for (i=0; i<100; Ar[i++]=random(101)-50); /* заполнение
массиваслучайными числами */
printf("Начальный массив:\n");/*вывод начального массива*/
for (i=0; i<100; printf("%3d ",Ar[i++]));
putchar('\n');
putchar('\n');
for (nn=i=0; i<100; i++) /* перебор массива */
{ if (Ar[i]<0)
if (!nn) { /*обработка отрицательногоэлемента*/
/*начало последовательности */
/* запомнитьиндекс начала, начальное
значение накопителя суммыи
счетчикаэлементов */
ib=i; av=Ar[i]; nn=1;
}
else { av+=Ar[i]; nn++;
/* накопление суммы, подсчет количества*/
}
/* конец обработки отрицат. элемента */
else /* обработка положительного элемента */
if (nn)
{/*еслиесть неообработаннаяотрицат.
последовательность */
av/=nn; /* усреднение */
/* перебор всей последовательности с
ограничением*/
for (j=ib; j<i; j++)
if (Ar[j]>av) Ar[j]=av;
nn=0; /* последовательность обработана*/
} /* конец еслиесть необработанная */
} /* конец переборамассива */
if (nn)/*если не обработана последняя отрицательная
последовательность */
for (av/=nn, j=ib; j<i; j++)
if (Ar[j]>av) Ar[j]=av;
printf("Массив-результат:\n"); /* вывод результатов */
for (i=0; i<100; printf("%3d ",Ar[i++]));
putchar('\n');
return 0;
}

Отладка программы

Отладка программы включает в себя в первую очередь проверку результатов, которые выдает программа. Размер массива и значения элементов таковы, что не составит труда проверить преобразования нескольких последовательностей, выполняя вычисления вручную или при помощи калькулятора.

Если же обнаруживаются ошибки в результатах, то можно использовать пошаговый метод отладки, при этом следует проверять работу алгоритма отдельно по ветвям: 7–8–9–10; 7–8–9–11; 7–8–12–13–14–15–16–17. При пошаговой отладке следует отслеживать в первую очередь значения тех переменных, которые отвечают за преобразование— іb, nn, av.

Отдельно следует проверять работу программы для случаев, когда массив начинается отрицательной последовательностью и когда массив заканчивается отрицательной последовательностью.

ПРИМЕР 2

Описание решения задачи приводится со ссылками на решение примера 1. Описываются только решения, отличные от тех, что принимались в примере 1.





Поделиться с друзьями:


Дата добавления: 2018-11-12; Мы поможем в написании ваших работ!; просмотров: 232 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

2329 - | 2119 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.