Методичка БКП - 2. Науки российской федерации федеральное государственное бюджетное образовательное учреждение
Скачать 1.02 Mb.
|
Исходные данные: a, b и Eps, h; Результат: Ymax2; Промежуточные данные:Ymax1, x, y,n, S1; 6.’); юю Программа на языке Си. #include #include #include int main () { float a,b,x; float h,y,Eps; float Ymax1,Ymax2; printf ("\n Lab_6");printf ("\n Выполнил студ. 1 курса");printf ("\n Ф.И.О");printf ("\n Введите значение a:");scanf ("%f",&a);printf ("\n Введите значение b:");scanf ("%f",&b);printf ("\n Введите точность Eps:");scanf ("%f",&Eps);printf ("\n Введите шаг измен. h:");scanf ("%f",&h);Ymax2=f(a);do{Ymax1=Ymax2;Ymax2=f(a);x=a+h;while (x<=b){y=f(x); if (Ymax2x=x+h;}h=h/2;} while (fabs(Ymax1-Ymax2)printf ("\n Наибольшее значение. Ymax2=%f",Ymax2);getch ();}Лабораторная работа №7Разработка алгоритмов обработки одномерных массивовТема: Разработка алгоритмов одномерных массивов (4 часа) Цель работы: Овладение практическими навыками обработки одномерных массивов, особенностями их ввода - вывода. Задание на выполнение. Написать алгоритм и программу обработки массива в соответствии с заданием. Задан массив из n чисел. Вычислить сумму и количество элементов массива удовлетворяющих условию: 0 < x(i)<1. Вычислить среднее арифметическое значение элементов массива. Переписать элементы удовлетворяющих условию -1 Определить максимальный элемент массива и ее порядковый номер. Найти минимальный и максимальный элементы массива и поменять их местами. Вычислить среднее геометрическое элементов массива удовлетворяющих условию x(i) >0 Определить сумму элементов массива кратных трем. Определить сумму и количество положительных элементов массива. Переписать подряд в другой массив все отрицательные элементы. Определить максимальный элемент среди отрицательных элементов и его порядковый элементов. Определить максимальный элемент и его порядковый номер среди элементов меньших, чем заданное число. Определить количество наибольших элементов массива. Переписать исходный массив в другой в обратном порядке. Переписать в другой массив сперва положительные, затем нулевые, а затем отрицательные элементы исходного массива. Найти сумму элементов целочисленного вектора, являющихся простыми числами. Подсчитать число палиндромов среди элементов заданного целочисленного вектора. Алгоритмы обработки массивов в основном проводятся с помощью циклов типа “Для…”. Ввод и вывод массива осуществляется поэлементно: сперва задается количество элементов, а затем каждый элемент с помощью цикла “Для…”. Приведем пример выполнения задания: упорядочить по возрастанию заданный массив A из n элементов. Исходные данные: n, A; Результат: A; Промежуточные данные: B; Программа на языке Си. #include #include #include int main () { int n,k,i,B; int a[30]; printf ("\n Lab_7"); printf ("\n Выполнил студ. 1 курса"); printf ("\n Ф.И.О"); printf("\n Введите размерность массива A: n="); scanf("%d",&n); printf("\n введите значение элементов массива A\n"); for (i=0;i { printf("a[%d]=",i); scanf("%d",&a[i]); } for (i=0;i for (k=0;k { if (a[k]>a[k+1]) { B=a[k]; a[k]=a[k+1]; a[k+1]=B; } } printf("\n Массив A:\n"); for (i=0;i { printf("%d ",a[i]); } getch(); } Приведем некоторые комментарии к программе на языке Паскаль. В строке 2, кроме описания простых переменных, приведено описание одномерного массива A, с помощью ключевого слова array за которым в квадратных скобках указывается размерность массива (в нашем случае достаточно и 20 элементов), а затем тип массива (of real). Строка 7 содержит два оператора. В этой строке производится диалоговый ввод количества элементов массива. Строки 8–11 образуют диалоговый ввод элементов массива с клавиатуры. Для организации ввода используется оператор цикла с конечным числом повторения For ... (“Для …”). Строки 13 – 17 блок программы, где производится сортировка массива. Сортировка производится с помощью вложенных циклов типа For. Внутренний цикл составляет 14 – 16 строки. Поэлементный вывод полученного массива производится в строке 19. Дополнительные задачи Из вектора В=(в1,в2,...,вN) получить вектор А=(а1,а2,...,аN) путем исключения из В минимального элемента (первого, если их несколько). Выяснить, имеются ли в массиве Y={y(i)}, i=1,...,N два подряд идущих нулевых элемента. Если такие элементы имеются, то найти их количество, в противном случае выдать соответствующее сообщение. Даны натуральные числа n и m, целые числа a1, a2,...,an, b1, b2,...,bm. Среди a1, a2,...,an нет повторяющихся чисел, нет их и среди b2,...,bm. Построить пересечение последовательностей a1, a2,...,an и b1, b2,...,bm. Даны натуральные числа n и m, целые числа a1, a2,...,an, b1, b2,...,bm. Среди a1, a2,...,an нет повторяющихся чисел, нет их и среди b2,...,bm. Построить объединение данных последовательностей. Даны натуральные числа n и m, целые числа a1, a2,...,an, b1, b2,...,bm. Среди a1, a2,...,an нет повторяющихся чисел, нет их и среди b2,...,bm. Получить все члены последовательности b2,...,bm, которые не входят в последовательность a1, a2,...,an. Даны натуральные числа n и m, целые числа a1, a2,...,an, b1, b2,...,bm. Среди a1, a2,...,an нет повторяющихся чисел, нет их и среди b2,...,bm. Верно ли, что все члены последовательности a1, a2,...,an входят в последовательность b2,...,bm. Даны целые числа a1, a2,...,an (в этой последовательности могут быть повторяющиеся числа). Получить все числа, которые входят в последовательность по одному разу. Даны целые числа a1, a2,...,an (в этой последовательности могут быть повторяющиеся числа). Выяснить, имеется ли в последовательности хотя бы одна пара совпадающих чисел. Даны действительные числа a1, a2, ... Известно, что a1>0 и что среди a2, a3, ... есть хотя бы одно отрицательное число. Пусть a1, ..., an - члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно). Получить: a1+a2+ ...+an и a1*a2* ...*an. Даны действительные числа a1, a2, ... Известно, что a1>0 и что среди a2, a3, ... есть хотя бы одно отрицательное число. Пусть a1, ..., an - члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно). Получить: a1, a1a2, a1a2a3, ..., a1a2...an и a1a2+a2a3+...+an-1an+ana1. Даны действительные числа a1, a2, ... Известно, что a1>0 и что среди a2, a3, ... есть хотя бы одно отрицательное число. Пусть a1, ..., an - члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно). Получить: a1a2+a2a3+...+an-1an+ana1 и (- 1)nan. Отсортировать каждые Х элементов вектора целых чисел (число элементов в векторе кратно Х). Задан упорядоченный по убыванию массив F=F(i), i=1,2,...,N. Включить число Z в массив F, не нарушая упорядоченности. Вывести полученный массив F=F(i), i=1,2,...,N+1. Заданы N точек на плоскости ХОУ своими координатами (массивы Х и У). Определить количество точек лежащих во второй четверти координатной плоскости и найти среди них самую удаленную точку от начала координат. Заданы N точек на плоскости ХОУ своими координатами (массивы Х и У). Определить количество точек лежащих ниже прямой у=2+х и найти среди них самую удаленную точку от оси ординат. Заданы N точек на плоскости ХОУ своими координатами (массивы Х и У). Образовать новый массив из номеров точек, лежащих на прямой у=2+х и определить количество четных элементов в этом массиве. Задается одномерный массив из N элементов. С помощью одного прохода по массиву определить количество элементов массива совпадающих с наибольшим элементом. Задаются N точек своими координатами. Определить количество точек лежащих в первой четверти координатной плоскости и если такие точки есть, то образовать массив номеров этих точек. Заданы N точек на плоскости ХОУ своими координатами. Определить имеется среди них хотя бы одна пара точек симметричных относительно какой-либо оси координат? Задан одномерный массив вещественных чисел размерности N. Определить количество элементов массива меньших по абсолютной величине ее наименьшего элемента среди положительных. Заданы N точек на плоскости ХОУ своими координатами. Определить количество точек лежащих ниже прямой у=2х и найти среди них самую удаленную точку от оси ординат. Заданы N точек на плоскости ХОУ своими координатами. Образовать новый массив из абсцисс точек лежащих на параболе у=2-х2 и определить наибольший элемент этого массива. Задается последовательность (массив) из N целых чисел. Если хотя бы один элемент является простым числом, то найти сумму всех простых чисел - элементов этой последовательности. В противном случае выдать соответствующее сообщение. Задается последовательность (массив) из N чисел. С помощью одного прохода по массиву определить количество элементов массива совпадающих с наибольшим элементом. Все компоненты заданной последовательности чисел a1, a2, ...,an, начиная с первой по порядку положительной компоненты, уменьшить на единицу. Найти наименьший из положительных элементов заданной последовательности чисел a1, a2, ..., an . Если в заданной последовательности целых чисел a1,a2,...,an есть элементы со значением, равным заданному числу B, то переменной С присвоить значение, равное сумме всех элементов, предшествующих первому по порядку такому элементу; в противном случае вывести соответствующий текст. Если в заданной последовательности целых чисел a1,a2,...,an есть элементы со значением, равным заданному числу B, то переменной С присвоить значение, равное произведению всех элементов, следующих за первым по порядку таким элементом; в противном случае вывести соответствующий текст. Имеется монотонно убывающая последовательность чисел a1,a2,..., an. Определить квадрат суммы положительных членов этой последовательности. Определить, является ли заданная последовательность чисел a1,a2,..., an монотонно убывающей. Вычислить вектор Z={z1,z2,z3,...,zn}, где каждая компонента, которого определяется по формуле zk=xk + m*yk, где xk, yk - компоненты заданных векторов X={x1, x2,...,xn} и Y={y1,y2,...,yn}, а m=min(k, xk, yk) Задан одномерный массив элементами, которого являются целые положительные числа. Сформировать новый массив i –ым элементом, которого являются сумма цифр i – го элемента исходного массива. Полученный массив упорядочить по возрастанию. В заданном массиве чисел определить количество положительных элементов произведение цифр, которых является четным числом. Если нет таких элементов, то выдать соответствующее сообщение. Лабораторная работа №8Разработка алгоритмов обработки двумерных массивовТема: Разработка алгоритмов со структурой вложенных циклов (обработка двумерных массивов) (4 часа) Цель работы: Овладение практическими навыками разработки алгоритмов со структурой вложенных циклов, способами ввода-вывода двумерных массивов. Задание на выполнение Написать алгоритм обработки массива в соответствии с заданием. Вывести на печать результаты обработки и массив в общепринятом виде. Задание выполнить в соответствии с вариантом. Задан двумерный массив. Вычислить и запомнить сумму и количество положительных элементов каждого столбца матрицы. Результаты вывести в виде двух строк. Вычислить количество и сумму четных элементов каждой строки. Результаты вывести в виде двух столбцов. Вычислить количество и сумму элементов находящихся над главной диагональю. Вычислить среднее арифметическое элементов находящихся под главной диагональю. Если есть в массиве хотя бы один положительный элемент, то все отрицательные элементы обнулить и вывести массив в общепринятом виде. Если количество отрицательных элементов является четным числом, записать на место отрицательных элементов нули, а вместо положительных - единицы и вывести нижнюю треугольную матрицу. Найти в каждой строке максимальный и минимальный элемент массива и поместить их на место последнего и первого элемента строки. Вывести в общепринятом виде. Транспонировать массив (заданный массив квадратный) и вывести на печать. Для целочисленной матрицы найти для каждой строки число элементов кратных пяти, и наибольший из полученных результатов. Из положительных элементов матрицы сформировать другую матрицу, располагая их в строках матрицы подряд, вывести в общепринятом виде. Найти в каждой строке наибольший элемент и поменять местами с элементом на главной диагонали. Вывести в общепринятом виде. Найти наибольший и наименьший элементы матрицы и поменять их местами. Задана матрица n×m. Ввести исходные данные первые n-1 строки и m-1 столбцов. Вычислить среднее арифметическое значение элементов каждой строки и записать его в m-й столбец, а также среднее арифметическое каждого столбца и записать в n-ю строку. Результаты вывести в общепринятом виде. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов. Упорядочить по возрастанию элементы каждой строки матрицы. Результаты вывести в общепринятом виде. Дана матрица А={a(i, j)}, i=1,...,N, j=1,...,M. Найти количество элементов этой матрицы, больших среднего арифметического всех ее элементов. Пример выполнения задания: Задан двумерный массив целых A={aij} чисел размерности (n×n). Определить сумму элементов массива расположенных ниже побочной диагонали. Исходные данные: n, A; Результат: S; Программа на языке Си. #include #include #include int main () { int n,j,i,S; int a[30][30]; printf ("\n Lab_8"); printf ("\n stud 1 kursa"); printf ("\n Ф.И.О"); printf("\n Введите размерность матрицы n="); scanf("%d",&n); printf("\n Введите значения элементов матрицы\n"); for (i=0;i { for (j=0;j { printf("a[%d,%d]=",i,j); scanf ("%d",&a[i][j]); } } S=0; for (i=0;i { for (j=n-i;j { S=S+a[i][j]; } } printf("\n Заданная матрица:"); printf("\n"); for (i=0;i { for (j=0;j { printf("%5d",a[i][j]); } printf("\n"); } printf("\n S=%d",S); getch (); } Дополнительные задачи Вычислить среднее геометрическое ненулевых элементов заданной матрицы X=X(i,j), i=1,2,...,N, j=1,2,...,M, расположенных в столбцах с нечетными номерами. Дана матрица A={a(i, j)}, i,j=1,...,N. Вычислить сумму и произведение элементов этой матрицы, больших среднего геометрического элементов, расположенных в строках над побочной диагональю и на ней. Дана матрица A={a(i, j)}, i,j=1,...,N. Вычислить сумму и произведение элементов этой матрицы, больших среднего геометрического элементов, расположенных над главной диагональю и на ней. Дана матрица A={a(i, j)}, i,j=1,...,N. Вычислить среднее арифметическое нечетных элементов, расположенных над главной диагональю. Дана квадратная матрица A размером n x n . Определить, встречается ли заданное число K среди максимальных элементов столбцов этой матрицы. Дана квадратная матрица A. Переменной В присвоить значение, равное количеству строк матрицы А, содержащих хотя бы одну нулевую компоненту. Дана матрица A размером n×m. Получить У = Х1*Хn + Х2*Хn-1 +...+Хn*Х1, где Хi - наименьший элемент в строке с номером i матрицы A. Для заданной целочисленной матрицы Z=Z(i, j), i=1,2,...,N, j=1,2,...,M определить номер строки с наибольшей суммой четных элементов. По трем заданным матрицам А={a(i, j)}, B={b(i, j)}, C={c(i, j)}, i,j=1,...,N построить матрицу Х={x(i, j)}, элементы которой вычисляются по формуле: x(i, j)=MAX{a(i, j), b(i, j), c(i, j)}. Дана матрица A={a(i, j)}, i,j=1,...,N. Вычислить среднее арифметическое нечетных элементов, расположенных над главной диагональю. Для заданной целочисленной матрицы Y={y(i, j)}, i,j=1,...,N вычислить среднее геометрическое положительных элементов, расположенных под главной диагональю. Определить наименьший среди положительных нечетных элементов в заданной матрице W=W(i, j), i=1,...,N, j=1,...,M. Дана матрица B размером n×m (n<=10). Получить вектор a1, a2, ..., an, компоненты которого находятся по правилу: ai равно первому по порядку положительному элементу в i-ой строке матрицы (если таких элементов в строке нет, то принять ai=-1). Дана прямоугольная матрица A. Если хотя бы один элемент строки матрицы отрицателен, то все элементы этой строки заменить нулями. Проверить, является ли заданная целочисленная матрица A размером n×m "магическим квадратом" (это значит, что суммы чисел во всех её строках, всех столбцах и двух диагоналях одинаковы). В двумерном массиве Х определить номера столбцов, в которых среднее арифметическое его элементов меньше, чем среднее арифметическое всех элементов массива. Определить номера строк матрицы А(1:N, 1:M), совпадающих с массивом D(1:M). Элементы заданной прямоугольной матрицы переписать в одномерный массив. Для каждого столбца заданной прямоугольной матрицы вычислить количество элементов, значения которых превосходят среднее арифметическое всех элементов заданной матрицы. Задана квадратная матрица А. Элементы k-ой строки матрицы А переписать в вектор Х, а элементы q-ого столбца переписать в вектор У. Найти скалярное произведение полученных векторов. Задан двумерный массив A целых чисел (таблица) размерности (NxN). Определить количество элементов-чисел в записи, которых в старшем разряде встречается заданная цифра L. Задана квадратная таблица (массив) целых чисел. Определить сумму элементов массива по столбцам, причем до столбца содержащий хотя бы один отрицательный элемент. Если таких столбцов несколько, то до столбца с большим номером. Задан двумерный массив целых чисел (таблица) размерности (NxМ). Определить номера строк массива хотя бы один элемент, которых в записи содержит заданную цифру Х. Элементы этих строк удвоить. Задан двумерный массив целых чисел (таблица) размерности (NxМ). Просуммировать элементы массива по строкам, причем до строки с наибольшим количеством положительных элементов, если таких строк несколько, то до строки с наибольшим номером. Задан двумерный массив целых чисел (таблица) размерности (NxМ). Просуммировать элементы массива по столбцам, пока не встретится столбец с наибольшим количеством отрицательных элементов. Задан двумерный массив целых чисел А. Определить сумму элементов массива, начиная с первой строки до строки с наименьшим количеством четных элементов, если таких строк несколько, то до строки с наибольшим номером. Задан двумерный массив чисел размерности NхM. Для каждой строки определить количество изменений знака элементов массива и найти наибольшее количество изменений знака. Задан двумерный массив положительных целых трехзначных чисел (таблица) размерности NxM. Определить количество элементов массива в записи, которых встречается заданная цифра. Задан двумерный массив целых чисел размерности NхN. Найти сумму элементов массива расположенных ниже главной диагонали и больше заданного числа x. Задан двухмерный массив положительных целых трехзначных чисел (таблица) размерности NxM. Определить количество элементов массива в записи, которых встречается заданная цифра. Задан двумерный массив целых чисел размерности NхN. Найти сумму элементов массива расположенных ниже главной диагонали в записи, которых в старшем разряде имеется заданная цифра x. Задан двумерный массив целых чисел положительных чисел размерности NхN. Найти количество элементов массива расположенных в строках с четными номерами и количество нечетных цифр, которых не более двух. Задан двухмерный массив положительных целых трехзначных чисел размерности NxM. Определить количество элементов массива в записи, которых заданная цифра (число) встречается дважды. ЛИТЕРАТУРАБоглаев Ю.П. Вычислительная математика и программирование. М. Высшая школа. 1990. 345 с. Немнюгин С.А. Turbo Pascal.Программирование на языке высокого уровня. Питер. 2008. 543 с. Павловская Т.А. С/С++ Программирование на языке высокого уровня. Питер. 2010. 460 с. Подбельский В.В., Фомин С.С. Программирование на языке Си. М.: Финансы и статистика. 2009. 600 с. Хаширова Т.Ю., Казиев В.М., Байрактаров Б.Р. Сборник задач по основам информатике. Биб. школы-лицея КБГУ. Нальчик 2000. 65 с. СОДЕРЖАНИЕ Введение 3 1. Понятие алгоритма его свойства и способы представления 5 3. Базовые понятия языка Си 11 Форматный ввод информации. 14 Форматный вывод. 15 4. Среда программирования 21 5. Задания по лабораторным работам 24 Лабораторная работа №1 24 Разработка алгоритмов линейной и разветвляющейся структуры 24 Лабораторная работа №2 29 Разработка алгоритмов итерационной структуры. Часть 1 29 Лабораторная работа №3 34 Разработка алгоритмов итерационной структуры. Часть 2 34 Лабораторная работа №4 37 Разработка алгоритмов итерационной структуры. Часть 3 37 Лабораторная работа №5 43 Разработка алгоритмов итерационной структуры. Часть 4 43 Лабораторная работа №6 48 Разработка алгоритмов со структурой вложенных циклов 48 printf ("\n Lab_6"); 51 printf ("\n Выполнил студ. 1 курса"); 51 printf ("\n Ф.И.О"); 51 printf ("\n Введите значение a:"); 51 scanf ("%f",&a); 51 printf ("\n Введите значение b:"); 51 scanf ("%f",&b); 51 printf ("\n Введите точность Eps:"); 51 scanf ("%f",&Eps); 51 printf ("\n Введите шаг измен. h:"); 51 scanf ("%f",&h); 51 Ymax2=f(a); 51 do 51 { 51 Ymax1=Ymax2; 51 Ymax2=f(a); 51 x=a+h; 51 while (x<=b) 51 { 51 y=f(x); 51 if (Ymax2 x=x+h; 51 } 51 h=h/2; 51 } 51 while (fabs(Ymax1-Ymax2) printf ("\n Наибольшее значение. Ymax2=%f",Ymax2); 51 getch (); 51 } 51 Лабораторная работа №7 52 Разработка алгоритмов обработки одномерных массивов 52 Лабораторная работа №8 60 Разработка алгоритмов обработки двумерных массивов 60 ЛИТЕРАТУРА 69 |