Порядок выполнения работы
1. Массивы
Подробно этот пункт раскрыт в указаниях к лабораторной работе № 1. Вспомним основные моменты при работе с массивами.
1) Размерность нединамического массива может быть только константой или константным выражением. Рекомендуется задавать размерность с помощью именованной константы.
2) Элементы массива нумеруются с нуля, поэтому максимальный номер элемента всегда на единицу меньше размерности.
3) Автоматический контроль выхода индекса за границы массива не производится, поэтому программист должен следить за этим самостоятельно.
2. Генерация случайных чисел
Для экономии времени и удобства массивы в лабораторных работах желательно заполнять случайным образом, используя функции randomize (), random () и rand (). Функция генерации случайного числа RAND() иммет следующий формат:
INT RAND();
Функция RAND() генерирует случайное число в диапазоне от 0 до 32767, аргументов не имеет. Функция возвращает случайное число. Возвращаемого значения, определяющего ошибку, нет.
Например:
#include <имя файла>
main()
{
int X;
/* Вывод первых 20 сгенерированных случайных чисел */
For (X=1;X<=20;X++)
Printf("ШАГ %d,число= %d \n",X,Rand());
Return 0;
}
Можно также использовать функции randomize (), random (), работающие также как и аналогичные функции в Паскале. Функция randomize () гарантирует несовпадение случайно сгенерированных чисел. Функция random () делает случайную выборку из диапазона от 0 до 1, если параметр не указан и, если параметр присутствует, от 0 до значения этого параметра.
Например:
int n;
n = random(150);
Соответственно, в данном примере переменной n присвоится значение случайного числа из диапазона [0..150], включая граничные точки. Когда требуется сгенерировать отрицательное число, прибегают к следующему механизму: от константного значения нужной величины отнимают сгенерированное положительное число большее по модулю чем первый параметр.
Например:
int k[10],i;
randomize();
for (i = 0; i<10; i++)
{
k[i] = 50 – random(100);
cout<<k[i]<<” ”;
}
Таким образом, в примере нижняя граница выборки будет (50-100) -50, верхняя (50-0) +50.
3. Разбор типового варианта.
Размерность массива – 200. Диапазон значений - 0…100. Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение.
include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main() {
clrscr();
const int N = 200;
int A[N];
int i,m1,m2,m3;
randomize();
printf("первоначальный массив:\n\n");
for (i=0;i<N;i++)
{
A[i]=random(101);
printf(" %d",A[i]);
}
m1=m2=m3=0;
for (i=0;i<N;i++)
{
if (A[i]>m1)
{ m3=m2; m2=m1; m1=A[i]; }
if (A[i]>m2 && A[i]<m1)
{ m3=m2;m2=A[i];}
if(A[i]>m3 && A[i]<m2) m3=A[i];
}
printf("\n\nтретье по величине значение массива = %d",m3);
printf("\n\nновый массив:\n\n");
for (i=0;i<N;i++)
{
if (A[i]>m3) A[i]=m3;
printf(" %d",A[i]);
}
getchar();
return 0;
}
Правила отчетности студента
1. Отчет должен содержать:
2.Титульный лист;
3. Цель работы; постановка задачи;
4. Текст программы (с комментариями!);
5. Результаты тестирования работы программы.
6. Контрольные вопросы
1. Массивы. Объявление массивов. Обращение к элементам массивов.
2. Чем выражается размерность нединамического массива?
3. Индексация (нумерация) элементов массива.
4. Генерация случайных чисел.
5. Функции randomize (), random () и rand ().
7. Варианты заданий
№ | Размерность массива | Диапазон значений | Что нужно сделать |
-100…100 | Заменить все элементы с отрицательным значением на значение минимального не равного 0 положительного элемента | ||
-50…50 | Подсчитать количество пар соседних элементов с одинаковыми значениями | ||
0…100 | Подсчитать количество участков, которые образуют непрерывные последовательности чисел с неуменьшающимися значениями | ||
-50…50 | Подсчитать количество пар соседних элементов, которые имеют противоположные знаки | ||
-100…100 | Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел, длина которых больше 5 | ||
-100…100 | Найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная | ||
-100…100 | Разместить все элементы с положительными значениями в левой части массива, элементы с отрицательными значениями - в правой, а нули - между ними | ||
-100…100 | Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов | ||
0…100 | Найти непрерывный участок из 10 элементов, сумма которых максимальна | ||
0…100 | Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение | ||
-50…50 | Найти количество пар соседних элементов, которые имеют одинаковые абсолютные значения, но противоположные знаки | ||
-100…100 | Во всех последовательностях положительных чисел заменить значения элементов с максимальным и минимальным значением на среднее для этой последовательности | ||
0…100 | Найти непрерывный участок из 10 элементов, который имеет наибольшее среднее значение элементов | ||
-50…50 | Во всех последовательностях положительных чисел изменить порядок элементов на противоположный | ||
-100…1000 | Во всех последовательностях положительных чисел ограничить снизу значения тех элементов, значения которых меньше среднего для этой последовательности | ||
-50…50 | Заменить все элементы с положительными значениями абсолютным значением отрицательного элемента с максимальным абсолютным значением | ||
-50…50 | Вывести начальные индексы всех непрерывных последовательностей чисел с не увеличивающимися значениями | ||
-50…50 | Вывести начальные индексы всех непрерывных знакопеременных последовательностей чисел | ||
-50…50 | Подсчитать количество всех, непрерывных последовательностей положительных чисел, длина которых больше 7 | ||
-50…50 | Найти из непрерывных последовательностей отрицательных чисел ту, которая имеет наибольшее абсолютное значение среднего арифметического ее элементов |