Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Индивидуальное задание к лабораторной работе




Составить программу для обработки массивов согласно индивидуальному заданию приведенному в таблице 23.

 

Таблица 23 - Индивидуальное задание

Вар. Условие задачи
  Дан массив X(15). Сформировать новый массив из четных чисел исходного
  Дан массив X(25). Сформировать новый массив из нечетных чисел исходного
  Дан массив D(15). Сформировать новый массив из кратных 3 чисел исходного
  Дан массив A(10). Сформировать новый массив из отрицательных чисел исходного
  Дан массив Z(15). Сформировать новый массив из положительных четных чисел исходного
  Дан массив X(25). Сформировать новый массив из чисел исходного, лежащих в интервале [-3,7]
  Дан массив Y(10). Сформировать новый массив из нечетных положительных чисел исходного
  Дан массив D(12). Сформировать новый массив из положительных кратных 3 чисел исходного
  Дан массив A(8). Сформировать новый массив из отрицательных четных чисел исходного
  Дан массив C(15). Сформировать новый массив из больших 8 чисел исходного
  Дан массив B(21). Сформировать новый массив из кратных 4 чисел исходного
  Дан массив A(12). Сформировать новый массив из отрицательных нечетных чисел исходного
  Дан массив X(8). Сформировать новый массив из отрицательных не кратных 3 чисел исходного
  Дан массив G(9). Сформировать новый массив из четных чисел исходного массива, стоящих на нечетных местах
  Дан массив Y(15). Сформировать новый массив из нечетных, кратных 3 чисел исходного
  Дан массив A(18). Сформировать новый массив из нечетных, кратных 5 чисел исходного
  Дан массив Z (10). Сформировать новый массив из четных чисел исходного, лежащих в интервале [1,12]
  Дан массив A(11). Сформировать новый массив из нечетных чисел исходного, лежащих в интервале [-3,15]
  Дан массив B (10). Сформировать новый массив из номеров отрицательных четных чисел исходного
  Дан массив A(8). Сформировать новый массив из номеров отрицательных нечетных чисел исходного
  Дан массив C(12). Сформировать новый массив из отрицательных чисел исходного, стоящих на четных местах
  Дан массив F(13). Сформировать новый массив из отрицательных чисел исходного, стоящих на нечетных местах
  Дан массив H(12). Сформировать новый массив из положительных чисел исходного, стоящих на четных местах
  Дан массив V(19). Сформировать новый массив из отрицательных чисел исходного, лежащих в диапазоне [-20,-5]
  Дан массив N(11). Сформировать новый массив из отрицательных кратных 5 чисел исходного
  Дан массив K(15). Сформировать новый массив из положительных чисел исходного, стоящих на нечетных местах
  Дан массив Y(11). Сформировать новый массив из отрицательных не кратных 5 чисел исходного
  Дан массив Z(14). Сформировать новый массив из положительных кратных 5 чисел исходного
  Дан массив R(13). Сформировать новый массив из отрицательных кратных 10 чисел исходного
  Дан массив N(11). Сформировать новый массив из отрицательных кратных 8 чисел исходного

 

Контрольные вопросы для подготовки и самостоятельной работы

1 Как производится доступ к элементам массива?

2 Какое количество операторов цикла необходимо для обработки главной или побочной диагонали массива?

3 Какие методы сортировки элементов Вы знаете?

4 Можно ли использовать указатель на тип элементов массива в качестве имени массива и что для этого необходимо?

5 Адрес какого элемента содержит имя массива?

6 Какие классы памяти можно использовать при объявлении массива?

7 Какие классы памяти используются по умолчанию?

8 Как размещаются элементы массива в памяти?

9 Как определяется количество байтов, на которое смещается указатель индексного выражения? Зависит ли смещение указателя от типа элементов массива?

 

Лабораторная работа №12

Сортировка одномерных массивов

Цель работы: изучить и научиться применять обработку массивов по заданным логическим условиям, формирование новых массивов и их сортировка.

 

Теоретические сведения

 

Упорядочение в одномерных массивах. Для демонстрации некоторых особенностей вложения циклов и работы с массивами рассмотрим простейшие алгоритмы сортировки. Необходимо, введя значение переменной 1<n<=100 и значения n первых элементов массива а[0],а[1],...,а[n-1], упорядочить эти первые элементы массива по возрастанию их значений. Текст первого варианта программы:

/* Упорядочение элементов массива */

#include <stdio.h>

main()

{

int n,i,j;

double a[100],b;

while(1)

{

printf("\n Введите количество элементов n=");

scanf("%d",&n);

if (n > 1 && n <= 100) break;

printf ("Ошибка! Необходимо 1<n<=100! ");

}

printf("\n Введите значения элементов массива:\n");

for(j=0; j<n;j++)

{

printf("a[%d]=”, j+1);

scanf(“%lf”,&a[j]);

}

for(i=0; i<n-1; i++)

for(j=i+l; j<n; j++)

if(a[i]>a[j])

{

b=a[i]; a[i]=a[j];. a[j]=b;

}

printf("\n Упорядоченный массив: \n");

for(j=0; j<n; j++)

printf("a[%d]=%f\n", j+1,a[j]);

}

При заполнении массива и при печати результатов его упорядочения индексация элементов выполнена от 1 до n, как это обычно принято в математике. В программе на Си это соответствует изменению индекса от 0 до (n-1).

В. программе реализован алгоритм прямого упорядочения - каждый элемент a[i], начиная с а[0] и кончая а[n-2], сравнивается со всеми последующими, и на место a[i] выбирается минимальный. Таким образом, а[0] принимает минимальное значение, а[1] - минимальное из оставшихся и т.д. Недостаток этого алгоритма состоит в том, что в нем фиксированное число сравнений, не зависимое от исходного расположения значений элементов. Даже для уже упорядоченного массива придется выполнить то же самое количество итераций (n-1)*n/2, так как условия окончания циклов не связаны со свойствами, т.е. с размещением элементов массива.

Алгоритм попарного сравнения соседних элементов позволяет в ряде случаев уменьшить количество итераций при упорядочении. В цикле от 0 до n-2 каждый элемент a[i] массива сравнивается с последующим a[i+l] (0<i<n-l). Если a[i]>a[i+l], то значения этих элементов меняются местами. Упорядочение заканчивается, если оказалось, что a[i] не больше a[i+l] для всех i. Пусть k - количество перестановок при очередном просмотре. Тогда упорядочение можно осуществить с помощью такой последовательности операторов:

do {

for (i=0, k=0; i<n-l; i++)

if (a[i] > a[i+l])

{

b=a[i]; a[i]=a[i+1]; a[i+1]=b;

k=k+l;

}

n--;

}

while (k > 0);

Здесь количество повторений внешнего цикла зависит от исходного расположения значений элементов массива. После первого завершения внутреннего цикла элемент а[n-1] становится максимальным. После второго окончания внутреннего цикла на место а[n-2] выбирается максимальный из оставшихся элементов и т.д. Таким образом, после j-гo выполнения внутреннего цикла элементы a[n-j],...,a[n-l] уже упорядочены, и следующий внутренний цикл достаточно выполнить только для 0<i<(n-j-l). Именно поэтому после каждого окончания внутреннего цикла значение n уменьшается на 1.

В случае упорядоченности исходного массива внешний цикл повторяется только один раз, при этом выполняется (n-1) сравнений, k остается равным 0. Для случая, когда исходный массив упорядочен по убыванию, количество итераций внешнего цикла равно (n-1), а внутренний цикл последовательно выполняется (n-1)*n/2 раз.

Задание. Написать программу на СИ для задачи, указанной в таблице 24. Имя и размер массива выбрать самостоятельно.

Таблица 24

Вар. Условие задачи
  Найти сумму двух наибольших четных чисел массива
  Найти произведение двух наибольших нечетных чисел массива
  Найти произведение двух наибольших четных чисел массива
  Найти сумму двух наибольших нечетных чисел массива
  Найти сумму трех наибольших четных чисел массива
  Найти сумму двух наименьших четных чисел массива
  Найти сумму двух наименьших нечетных чисел массива
  Найти сумму трех наименьших нечетных чисел массива
  Найти сумму двух наименьших положительных чисел массива
  Найти сумму двух наибольших отрицательных чисел массива
  Найти сумму трех наименьших положительных чисел массива
  Найти произведение двух наименьших положительных чисел массива
  Найти произведение двух наибольших отрицательных чисел массива
  Найти произведение трех наибольших кратных 5 чисел массива
  Найти произведение трех наименьших не кратных 4 чисел массива
  Найти произведение трех наибольших положительных кратных 3 чисел массива
  Найти произведение трех наименьших отрицательных нечетных чисел массива
  Найти сумму трех наименьших положительных четных чисел массива
  Найти сумму трех наибольших нечетных, лежащих в интервале [1,30], чисел массива
  Найти произведение четырех наименьших, лежащих в интервале [-20,20], чисел массива
  Найти сумму четырех наименьших кратных 5 и не больших 50 чисел массива
  Найти произведение двух наибольших и двух наименьших положительных четных чисел массива
  Найти сумму двух наибольших и двух наименьших отрицательных четных чисел массива
  Найти произведение двух наибольших и двух наименьших отрицательных нечетных чисел массива
  Найти сумму двух наибольших и двух наименьших нечетных чисел массива, лежащих в интервале [1,25]
  Найти произведение двух наибольших и двух наименьших положительных кратных 3 чисел массива
  Найти сумму двух наибольших и двух наименьших кратных 3 и не меньших 10 чисел массива
  Найти произведение двух наибольших и двух наименьших кратных 5 и не больших 20 чисел массива
  Найти сумму трех наибольших, не кратных 5 положительных чисел массива
  Найти произведение трех наименьших отрицательных кратных 3 чисел массива

 

Лабораторная работа № 13

 

Многомерные массивы.

Цель работы: изучить конструкции языка С и операторы для обработки многомерных массивов.

 

Теоретические сведения

Вложенные циклы. В теле цикла разрешены любые исполнимые операторы, в том числе и циклы, т.е. можно конструировать вложенные циклы.

В качестве примера рассмотрим фрагмент программы для получения суммы такого вида:

Введем следующие обозначения: а - двумерный массив, содержащий значения элементов матрицы; р - произведение элементов строки матрицы; с - сумма их значений; s - искомая сумма (результат). Опустив определения переменных и операторы ввода-вывода, запишем текст на языке Си:

double a[10][5];

for(s=0.0,j=0; j<10; j++)

{

for(p=1.0,c=0.0,i=0; i<5; i++)

{

p*=a[j][i];

c+=a[j][i];

}

s+=c+p;

}

При работе с вложенными циклами следует обратить внимание на правила выполнения операторов break и continue. Каждый из них действует только в том операторе, в теле которого он непосредственно использован. Оператор break прекращает выполнение ближайшего внешнего для него оператора цикла. Оператор continue передает управление на ближайшую внешнюю проверку условия продолжения цикла.

Для иллюстрации рассмотрим фрагмент другой программы для вычисления суммы произведений элементов строк той же матрицы:

double a[10][5];

for (j=0,s=0.0; j<10; j++)

{

for (i=0,p=1.0; i<5; i++)

{

if (a[j][i] ==0.0) break;

p*=a[j][i];

}

if (i <5) continue;

s+=p;

}

Внутренний цикл по i прерывается, если обнаруживается нулевой элемент матрицы. В этом случае произведение элементов столбца заведомо равно нулю, и его не нужно вычислять. Во внешнем цикле проверяется значение i. Если i<5, т.е. элемент a[j][i] оказался нулевым, то оператор continue передает управление на ближайший оператор цикла, и, таким образом, не происходит увеличение s на величину "недосчитанного" значения р. Если внутренний цикл завершен естественно, то i равно 5, и оператор continue не может выполняться.

Ход работы

 

1 Изучить теоретические сведения.

2 В соответствии с индивидуальным заданием разработать алгоритм и программу с применением указателей на массив и массив указателей для работы с двумерным и трёхмерным массивом.

3 Показать использование различных видов синтаксических конструкций, включая индексные выражения и указатели на тип элементов массива для доступа к элементам массива.

4 Набрать и отладить программу на компьютере.

5 Изучить работу операторов.

6 Получить результаты.

7 Оформить отчет.

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...