Следование осуществляется при помощи линейного алгоритма, который не содержит логических условий и имеет одну ветвь вычисления.
2 Составьте программу на языке С/С++, которая просит пользователя ввести свое имя, приветствует его, затем решает задачу в соответствии с одним из вариантов заданий, выдает результат и с добрыми пожеланиями прощается с пользователем по имени. Для нахождения значения сложного выражения разбейте задачу на простые подзадачи, результат решения которых можно сохранить в дополнительных переменных. Используйте при этом систему ввода/вывода в стиле языка С.
Варианты заданий
1 Составьте алгоритм нахождения выражения X=(Y+W-4)/(2+5\B)*A-Y.
2 Составьте алгоритм нахождения выражения .
3Составьте алгоритм нахождения выражения .
4 Составьте алгоритм нахождения выражения .
5 Составьте алгоритм нахождения выражения .
6 Переведите X кг (введенные пользователем) в пуд при условии 1пуд = 16кг.
7 Найдите площадь заштрихованной фигуры, если пользователь вводит длину и ширину каждого из прямоугольников.
8 Найдите площадь заштрихованной фигуры , если пользователь вводит радиусы окружностей.
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программы, краткие выводы.
Литература
1. Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2. Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа №10
Тема: Составление программ разветвляющейся структуры
Цель: Освоить способы программирования ветвящегося алгоритма в среде Borland C++.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
Оператор ifимеет следующий вид:
if(выражение) оператор;
else оператор;
Здесь оператор может состоять из одного или нескольких операторов или отсутствовать вовсе (пустой оператор). Раздел else является необязательным.
Если выражение истинно (т.е. не равно нулю), выполняется оператор или блок, указанный в разделе if, в противном случае выполняется оператор или блок, предусмотренный в разделе else. Операторы, указанные в разделах if или else, являются взаимоисключающими.
Например:
int main ( ) {
int a = 3, b = 6, r;
if (b < a) r = b;
else r = a;
return (0);
}
Вместо операторов if-else можно использовать тернарный оператор "?" (условный оператор, условное выражение).Общий вид заменяемых операторов if-else выглядит следующим образом.
if (условие) выражение;
elseвыражение;
В данном случае с операторами ifи else связаны отдельные выражения, а не операторы.
Оператор "?" называется тернарным, поскольку имеет три операнда.
Его общий вид таков.
Выражение1? Выражение2 : Выражение3 ;
Оператор "?" выполняется следующим образом. Сначала вычисляется Выражение1. Если оно является истинным, вычисляется Выражение2, и его значение становится значением всего тернарного оператора. Если Выражение1 является ложным, вычисляется Выражение3, и результатом выполнения тернарного оператора считается именно его значение.
Рассмотрим предыдущий пример:
int main ( ) {
int a = 3, b = 6, r;
r = (b < a) ? b : a;
return (0);
}
Результат оператора "?" может игнорироваться и не присваиваться ни одной переменной, например:
int main ( ) {
int a = 3, b = 6;
(b < a) ? printf(“переменная r = %d”, b) : printf(“переменная r = %d”, a) ;
return (0);
}
Практическая часть
1 Изучите теоретическую часть и подробно разберите примеры программ.
2Составьте две программы на языке С++ для решения одного из вариантов заданий с применением оператора ifис применением условной операции.
Варианты заданий
1) Пользователь вводит вещественные числа x, y, z. Вычислить: max (x + y + z, xyz);
2) Пользователь вводит вещественные числа x, y, z. Вычислить: min2 (x + y +z/2, xyz) + 1;
3) Пользователь вводит действительные числа a, b, c. Удвоить эти числа, если a >= b >= c, и заменить их абсолютными значениями, если это не так. Результат вывести на экран.
4) Пользователь вводит вещественные числа x, y. Вычислить z и вывести на экран:
x – y, если x > y
Z =
y - x + 1, в противном случае.
5) Пользователь вводит два действительных числа. Вывести на экран первое число, если оно больше второго, и оба числа, если это не так.
6) Пользователь вводит три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны. Результат вывести на экран.
7) Пользователь вводит четыре целых числа. Найти сумму положительных из них. Результат вывести на экран.
8) Пользователь вводит три действительных числа. Найти разность между минимальным и максимальным. Результат вывести на экран.
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программ, краткие выводы, ответы на вопросы.
Вопросы для контроля
1. Какие операторы ветвления используются в языке С/С++?
2. Чем отличается тернарная альтернатива от оператора ветвления if?
Литература
1 Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2 Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа №11
Тема: Составление программ разветвляющейся усложненной структуры
Цель: Научиться использовать оператор множественного выбора switch при составлении программ на языке программирования C++.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
Оператор switchимеет следующий формат:
switch ( выражение )
{ [объявление]
…
[ case константное-выражение1]: [ список-операторов1]
[ case константное-выражение2]: [ список-операторов2]
…
[ default: [ список операторов ]]
}
Выражение может быть любым выражением, допустимыми в языке С, значение которого должно быть целым. Можно использовать явное приведение к целому типу.
Значение выражения - ключ для выбора из нескольких вариантов. Тело оператора switch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением.
Константное выражение не может содержать переменные или вызовы функций.
Все константные выражения в операторе switch должны быть уникальны.
Кроме операторов, помеченных ключевым словом caseможет бытьодин фрагмент, помеченный ключевым словом default.
Чаще всего для выхода из оператора используется оператор break и оператор switch в этом случае имеет следующий вид:
switch (Z) {
case '+': x = y + z; break;
case '-': x = y - z; break;
case '*': x = y * z; break;
case '/': x = u / z; break;
default : ;
printf ( " Результат: %c" , x);
}
Один и тот же оператор можно пометить несколькими ключевыми словами case.
Например:
switch( i) {
case 1: / *Эти операторы case имеют общую */
case 2: / * последовательность операторов. */
f = 0;
break;
case 3: f = 1;
case 4: error(f) ; break;
}
Практическая часть
1 Изучите теоретическую часть и подробно разберите примеры программ.
2Составьте программу на языке С++ для решения одного из вариантов заданий с применением оператора switch.
Варианты заданий
Вычислите значение выражения (x - вещественное, k – целое или символ, s – строка(в задании 6 - 8)):
1. 0 <= k <= 35 5. 1 <= k <= 20
x2 , если k = 1, 4 x, если k = 5, 8, 2
y(x, k) = x – 5, если k = 21 10 – x2, если k = 10, 11
13/x, если k = 3, 15 y(x,k) = 16x/3, если k = 16
x, если k = иное 3x3, если k = иное
2. 5 <= k <= 15 6. k - символ
2x + 5, если k = 3, 6, 11 ''Катя'', если k = '1', '2’, '3'
10 - x, если k = 9, 10 ''Света'', если k = 'i', 'j', 'k'
y(x, k) = x3 , если k = 13 y(s, k) = ''Аня'', если k = 'N', 'V', 'S'
12 x , если k = иное ''Дима'', если k = иное
3. 13 <= k <= 23 7. k - символ
x5 , если k = 20, 21 ''мальчик'', если k = 'M', 'P', 'Z'
x – 1, если k = 16 ''девочка'', если k = 'g', 'q'
y(x, k) = 3 – 2/x, если k = 13, 14 y(s, k) = ''ребенок'', если k = 'w', 'r', 'd'
x2 – 2x, если k = иное ''человек'', если k = иное
4. 50 <= k <= 100 8. k - символ
16 – 5x, если k = 55, 58, 62 ''конфета'', если k = 'u', 'y', 'e'
x4, если k = 99, 100 ''шоколад'', если k = 's', 'h'
y(x, k) = 80x, если k = 77, 87, 97 y(s, k) = ''апельсин'', если k = 'A'
x/5, если k = иное ''сухарь'', если k = иное
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программы, краткие выводы, ответы на вопросы.
Вопросы для контроля
1. Какие особенности оператора множественного выбора Вы знаете?
2. Можно ли заменить оператор множественного выбора оператором ветвления if?
Литература
1 Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2 Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа №12
Тема: Составление программ циклической структуры
Цель: Научиться использовать оператор цикла for при составлении программ на языке программирования C++.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
Оператор цикла for
Общий вид оператора for таков.
for (инициализация; условие; приращение) [тело цикла]
Сначала выполняется инициализация(initialization) - оператор присваивания, который задает начальное значение счетчика цикла. Затем проверяется условие(condition), представляющее собой условное выражение. Цикл выполняется до тех пор, пока значение этого выражения остается истинным. Приращение(increment) изменяет значение счетчика цикла при очередном его выполнении. Эти разделы оператора отделяются друг от друга точкой с запятой. Как только условие цикла станет ложным, программа прекратит его выполнение и прейдёт к следующему оператору.
Пример 1. Цикл for выводит на экран числа от -10 до 10.
#include <stdio.h>
int main(void){
int x;
for(x = -10; x <= 10; x++) printf("%d ", x);
return 0;
}
Сначала переменной x присваивается число -10, а затем она сравнивается с числом 10. Поскольку ее значение меньше 100, вызывается функция printf(). Затем переменная х увеличивается на единицу, и условие цикла проверяется вновь. Как только ее значение превысит число 100, выполнение цикла прекратится. В данном случае переменная х является счетчиком цикла, который изменяется и проверяется на каждой итерации.
Несколько переменных могут быть счетчиками одного цикла.
for (x = 0, y = 0; х + у < 10; ++х, y = 2) { … }
Условное выражение не обязательно связано с проверкой счетчика цикла. В качестве условия цикла может использоваться любой допустимый оператор сравнения или логический оператор. Это позволяет задавать несколько условий цикла одновременно.
Пример 2.Фрагмент программы, который проверяет пароль пользователя – это слово "пароль". Для ввода пароля пользователь может сделать три попытки. Выполнение цикла прекращается, пользователь исчерпал все попытки или ввел правильный пароль.
…
char str[20];
int x;
for (x = 0; x < 3 && strcmp(str, "пароль"); ++х) {
printf("Введите пароль: ");
gets(str);
}
if (x == 3) return (0);
/* Иначе пользователь получает доступ к системе ... */
…
В этой функции используется стандартная функция strcmp(), сравнивающая две строки и возвращающая нуль, если они совпадают.
Практическая часть
1 Изучите теоретическую часть и подробно разберите примеры программ.
2 Напишите программу на языке С++ с применением оператора for, которая проверяет пароль пользователя, а затем позволяет пользователю ввести два целых числа M и N (M < N), определяющие границы диапазона возможных значений, и реализовать один из вариантов заданий:
Варианты заданий
1) Найти сумму всех положительных значений среди чисел, больших M и меньших N.
2) Найти количество отрицательных значений среди чисел, больших M и меньших N.
3) Определить, каких чисел (в диапазоне от M до N) больше: положительных или отрицательных.
4) Найти количество всех положительных значений среди чисел, больших M и меньших N.
5) Найти сумму всех четных чисел, больших M и меньших N.
6) Найти сумму всех чисел (в диапазоне от M до N), кратных 3.
7) Найти среднее арифметическое чисел, больших M и меньших N.
8) Найти сумму всех нечетных чисел, больших M и меньших N.
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программы, краткие выводы, ответы на вопросы.
Вопросы для контроля
1. Какие способы применения оператора цикла for Вы знаете?
2. Может ли оператор for не иметь тела?
Литература
1 Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2 Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа №13
Тема: Составление программ усложненной структуры
Цель: Научиться использовать операторы циклов whileиdo-while при составлении программ на языке программирования C++.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
Оператор whileимеет следующий вид. while (условие) оператор;
Условие может задаваться любым выражением.
Пример 1. Программа выводит на экран введенный символ, пока пользователь не введет букву V,
int main(void){
char ch; ch = '\0'; /* начальное значение переменной ch */
while (ch != 'V') { ch = getchar(); printf(“%c”, ch); }
return ch;
}
Сначала переменной ch присваивается нуль. Затем цикл while проверяет, не равно ли значение переменной chсимволу V. Поскольку начальное значение переменной ch равно нулю, условие цикла является истинным, и его выполнение продолжается. Условие цикла проверяется каждый раз, когда пользователь вводит символ с клавиатуры. Как только он введет букву V, условие цикла станет ложным, и программа прекратит его выполнение. Общий вид оператора do-while таков.
do {
оператор;
} while (условие);
Цикл do-while повторяется до тех пор, пока условие не станет ложным.
Пример 2. Цикл do-while считывает числа с клавиатуры, пока они не превысят 1000.
do { scanf ( "%d" , &num) ;
} while(num > 1000);
Чаще всего оператор do-while применяется для выбора пунктов меню. Когда пользователь вводит допустимое значение, оно возвращается соответствующей функцией. Недопустимые значения игнорируются.
Пример 3. Программ для проверки правописания может иметь такой вариант реализации.
int main(void){
char ch;
for ( ; ; ) {
do { printf("1. Проверка правописания\n");
printf("2. Исправление ошибок\n");
printf("3. Вывод ошибок\n");
printf("4. Выход\n");
printf(" Выберите пункт меню: ");
ch = getchar(); /*Ввод символа с клавиатуры */
} while(ch != ‘1' && ch != '2' && ch != '3');
switch(ch) {
case '1' : // операторы, реализующие проверку правописания
getchar(); break;
case '2': // операторы, реализующие исправление ошибок
getchar(); break;
case '3': // операторы, реализующие вывод ошибок
getchar(); break;
case '4':
exit(0); /* Возврат в операционную систему */
}
return(0);
}
Практическая часть
1 Изучите теоретическую часть и подробно разберите примеры программ.
2Составьте программу на языке С++ для решения одного из вариантов заданий с применением оператора while. Программа должна иметь пользовательское меню.
Варианты заданий
Вычислите бесконечную сумму с заданной точностью Е (Е > 0). Считайте, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем Е, - это и все последующие слагаемые можно уже не учитывать.
1) 5)
2) 6)
3) 7)
4) 8)
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программы, краткие выводы, ответы на вопросы.
Вопросы для контроля
1. Какие особенности операторов циклов whileиdo-while Вы знаете?
2. В каких случаях применяются операторы циклов с предусловием и постусловием?
Литература
1 Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2 Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа №14
Тема: Обработка одномерных массивов
Цель: Научиться использовать одномерные массивы при составлении программ на языке программирования C++.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
Массив (array) — это совокупность переменных, имеющих одинаковый тип и объединенных под одним именем. Доступ к отдельному элементу массива осуществляется с помощью индекса. Согласно правилам языка C/C++ все массивы состоят из смежных ячеек памяти. Младший адрес соответствует первому элементу массива, а старший - последнему.
Объявление одномерного массива выглядит следующим образом.
тип имя_переменной [размер]
Вот как выглядит объявление массива с именем bbb, имеющего тип double и состоящего из 10 элементов.
double bbb [10] ;
Доступ к элементу массива осуществляется с помощью имени массива и индекса. Для этого индекс элемента указывается в квадратных скобках после имени массива.
Например, оператор, приведенный ниже, присваивает третьему элементу массива bbb значение 33.22.
bbb [3] = 33.22;
Индекс первого элемента любого массива в языке C/C++ равен нулю.
Следовательно, оператор
char p[10] ;
объявляет массив символов, состоящий из 10 элементов — от р[0] до р[9].
Пример:
Следующая программа позволяет пользователю заполнить целочисленный массив шестнадцатью числами.
#include <stdio.h>
int main (void) {
int x[16]; /* Объявление целочисленного массива */
int t;
printf("Введите последовательно 16 целых чисел: ");
/* Заполнение массива числами */
for (t = 0; t < 16; ++t) scanf("%d ", x[t]);
/* Вывод на экран элементов массива х */
for (t = 0; t < 16; ++t) printf("%d ", x[t]);
return 0 ;
}
Практическая часть
1 Изучите теоретическую часть.
2Составьте программу на языке С++ для решения одного из вариантов заданий. Программа должна иметь пользовательское меню, которое позволяет: заполнить массив и при этом вывести его на экран, выполнить операции над массивом и просмотреть результаты, закрыть программу.
Вариант 1: Одномерный массив из 15 элементов случайным образом заполняется целыми числами из диапазона [-100..100]. Найти среднее арифметическое отрицательных и среднее арифметическое положительных элементов массива.
Вариант 2: Одномерный массив из 18 элементов случайным образом заполняется целыми числами из диапазона [-200..500]. Найти разность модулей максимального и минимального элементов массива.
Вариант 3: Одномерный массив из 14 элементов случайным образом заполняется целыми числами из диапазона [-50..100]. Определить каких элементов массива больше, отрицательных или положительных.
Вариант 4: Одномерный массив из 12 элементов случайным образом заполняется целыми числами из диапазона [-350..450]. Найти сумму отрицательных и сумму положительных элементов массива.
Вариант 5: Одномерный массив из 13 элементов случайным образом заполняется целыми числами из диапазона [-120..150]. Найти количество четных положительных и количество нечетных отрицательных элементов массива.
Вариант 6: Одномерный массив из 16 элементов случайным образом заполняется целыми числами из диапазона [-240..180]. Найти сумму четных отрицательных и сумму нечетных положительных элементов массива.
Вариант 7: Одномерный массив из 17 элементов случайным образом заполняется целыми числами из диапазона [-100..200]. Определить каких элементов массива больше, четных или нечетных.
Вариант 8: Одномерный массив из 11 элементов случайным образом заполняется целыми числами из диапазона [-120..150]. Найти количество элементов массива, кратных 3, и сумму нечетных отрицательных элементов массива.
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программы, краткие выводы, ответы на вопросы.
Вопросы для контроля
1. Какая функция позволяет случайным образом выбрать числа из заданного диапазона?
2. Какие способы сортировки массива Вы знаете?
Литература
1 Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2 Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа №15
Тема: Обработка двухмерных массивов
Цель: Научиться использовать двухмерные массивы при составлении программ на языке программирования C++.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
В языке С определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Простейшим из них является двухмерный. По существу, двухмерный массив — это массив одномерных массивов. Объявление двухмерного массива d, состоящего из 10 строк и 20 столбцов, глядит следующим образом.
int d[10][20];
В языке C/C++ размерности массива заключаются в квадратные скобки. Обращение к элементу двухмерного массива выглядит так:
d[1][2]
Пример 1.Следующая программа заполняет двухмерный массив числами от 1 до 12 и выводит их на экран построчно.
#include < iostream >
using namespace std;
int main(void){
int t, i, num[3][4];
for (t = 0; t < 3; ++t)
for (i = 0; i < 4; ++i)
num[t][i] = (t*4)+i+1;
/* Вывод на экран */
for(t = 0; t < 3; ++t) {
for(i = 0; i < 4; ++i)
cout << num[t][i]<< " ";
cout << "\n";
}
return 0;
}
В данном примере элемент num[0] [0] равен 1, num[0] [1] равен 2, num [0] [2] равен 3 и т.д. Значение элемента num[2] [3] равно 12. Массив num можно изобразить следующим образом.
num[t][i]
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
Двухмерный массив хранится в виде матрицы, в которой первый индекс задает номер строки, а второй — номер столбца. Таким образом, при обходе элементов в порядке их размещения в памяти правый индекс изменяется быстрее, чем левый.
Пример 2.Рассмотрим короткую программу, в которой двухмерный массив используется для хранения оценок, полученных студентами. Предполагается, что преподаватель ведет занятие в трех группах, в которых учатся не более 30 студентов. Обратите внимание на то, как происходит обращение к массиву grade.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
#define CLASSES 3
#define GRADES 30
int grade[CLASSES][GRADES];
int main() {
char ch, str[80];
for ( ; ; ) {
do {
cout << "(В)вод оценок \n";
cout << "(П)ечать оценок\n ";
cout << "(К)онец\n ";
cin >> str;
ch = toupper (*str) ; /* возвращает символ в верхнем регистре */
} while (ch != 'B' && ch != 'П' && ch != 'К');
switch(ch) {
case 'B' : { /* Ввод оценок. */
int t, i;
char s[80];
for (t = 0; t < CLASSES; t++) {
cout <<" Группа № "<< t+1<< " :\n ";
for (i = 0; i < GRADES; ++i)
{
cout << "Введите оценку студента № "<< i+1<<" - ";
cin >> grade[t][i];
}
}
}
break ;
case 'П' :{ /* Вывод оценок. */
int t, i;
for (t = 0; t < CLASSES; ++t) {
cout <<" Группа № "<< t+1<< " :\n ";
for (i = 0; i < GRADES; ++i)
cout << "Студент № "<< i+1<< " имеет оценку - "<< grade [t][i]<<"\n";
}
getchar();
}
break;
case 'K' : exit(0) ;
}
}
return 0;
}
Практическая часть
1 Изучите теоретическую часть.
2Разработайте программу, в которой пользователь с помощью меню может осуществить действия одного из вариантов заданий:
Вариант 1
- заполнить случайным образом целыми числами из диапазона [-200; 200] двумерный массив, содержащий 6х9 элементов и вывести исходный массив на экран в виде матрицы;
- заменить все элементы массива, меньшие n (nвводится пользователем) на 0 и вывести результирующий массив на экран;
- отсортировать строку, указанную пользователем, в порядке убывания и вывести результат на экран.
Вариант 2
- заполнить случайным образом целыми числами из диапазона [-400; 400] двумерный массив, содержащий 10х10 элементов и вывести исходный массив на экран;
- определить количество положительных элементов на главной диагонали массива и результат вывести на экран;
- отсортировать столбец, указанный пользователем, в порядке возрастания и вывести результат на экран.
Вариант 3
- заполнить случайным образом целыми числами из диапазона [-70; 170] двумерный массив, содержащий 9х11 элементов и вывести исходный массив на экран;
- определить максимальный элемент массива и результат вывести на экран;
- отсортировать строку, указанную пользователем, в порядке возрастания и вывести результат на экран.
Вариант 4
- заполнить случайным образом целыми числами из диапазона [-100; 200] двумерный массив, содержащий 12х12 элементов и вывести исходный массив на экран;
- определить количество отрицательных элементов на главной диагонали массива и результат вывести в на экран;
- отсортировать столбец, указанный пользователем, в порядке убывания и вывести результат на экран.
Вариант 5
- заполнить случайным образом целыми числами из диапазона [-250; 250] двумерный массив, содержащий 7х10 элементов и вывести исходный массив на экран;
- определить количество отрицательных элементов массива и результат поместить на экран;
- отсортировать строку, указанную пользователем, в порядке возрастания и вывести результат на экран.
Вариант 6
- заполнить случайным образом целыми числами из диапазона [-50; 40] двумерный массив, содержащий 8х7 элементов и вывести исходный массив на экран;
- определить минимальный элемент массива и результат поместить на экран;
- отсортировать столбец, указанный пользователем, в порядке убывания и вывести результат на экран.
Вариант 7
- заполнить случайным образом целыми числами из диапазона [-300; 500] двумерный массив, содержащий 8х8 элементов и вывести исходный массив на экран;
- заменить все элементы главной диагонали массива на -1 и вывести результирующий массив на экран;
- отсортировать все четные строки в порядке убывания и вывести результат на экран.
Вариант 8
- заполнить случайным образом целыми числами из диапазона [-120; 80] двумерный массив, содержащий 6х8 элементов и вывести исходный массив на экран;
- заменить все отрицательные элементы массива на число, введенное пользователем, и вывести результирующий массив на экран;
- отсортировать все нечетные строки в порядке возрастания и вывести результат на экран.
3 Оформите отчет по выполнению практической работы, в котором отразите: номер работы, тему, цель, задание, листинг программы, краткие выводы, ответы на вопросы.
Вопросы для контроля
1. Каким образом можно обратиться к элементу двумерного массива?
2. Какой из индексов двумерного массива изменяется быстрее?
Литература
1 Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2011. – 461 с.
2 Шилдт Г. Полный справочник по С++, 4-е издание. : Пер. с англ. – М. : Издательский дом «Вильям», 2012. – 800 с.
Практическая работа 16
Тема: Использование стандартных функций для работы с массивами
Цель: Научиться работать с массивами, размещенными в динамической памяти.
Оборудование и программное обеспечение:
1 Персональный компьютер IBM PC/AT.
2 Операционная система Windows XP.
3 Среда программирования Borland C++.
Теоретическая часть
Двухмерный массив — это массив одномерных массивов. Объявление двухмерного массива d, состоящего из 10 строк и 20 столбцов, глядит следующим образом.
int d[10][20];
В языке C/C++ размерности массива заключаются в квадратные скобки. Обращение к элементу двухмерного массива выглядит так:
d[1][2]
Пример 1.Следующая программа позволит пользователю заполнить двумерный массив и выведет исходный массив в виде матрицы на экран.
#include<stdio.h>
#include<iostream.h>
#definen 3
#definem 3
intmain() {
int x[n][m];
for(i=0; i<n; i++)
{
cout<<"\nВведите элементы "<<i+1<<" строки массива: \n ";
for(j=0; j<m; j++){
cout<<"\nx["<<i+1<<","<<j+1<<"] = ";
cin>>x[i][j];
}
}
clrscr(); // очистка экрана
cout<<"Элементы массива:\n";
for(i=0; i<n; i++)
{
cout<<"\n";
for(j=0; j<m; j++){
cout<<" "<<x[i][j];
}
}
getchar();
return (0);
}
Разместить массив в динамической памяти можно с помощью функций:
void *malloc (size_t size);
Функция выделяет в «куче» (heap) блок размером в size байт.
void *calloc (size_t nitems, size_t size);
Функция выделяет память под nitems объектов, размер которых равен size.
указатель = new тип_массива[размер];
Одномерный массив a[10] из элементов типа float можно создать следующим образом
float *a;
a = (float*) (calloc(10, sizeof(float)); //или
a = new float [10];
Двумерный массив нужно распределить в памяти следующим образом:
a = new float [8] [10];
При размещении многомерных массивов надо иметь в виду, что первый размер можно задавать переменной, но остальные размеры задаются только константами.
a = new double [n] [10];
Пример 2. Фрагмент кода программы позволяет разместить двумерный массив в динамической памяти.
int main ()
{ double **a;
int n, m, i;
// scanf("%d %d", &n, &m);
cout << "количество строк массива - ";
cin >> &n;
cout << "количество столбцов массива - ";
cin >> &m;
a = (double **) calloc(n, sizeof(double *));
for (i = 0; i < n; i++)
a[ i ] = (double *) calloc(m, sizeof(double));
// или
a = new double *[n];
for (i = 0; i < n; i++)
a[i] = new double [m];
. . . . . . . . . . . .
}
Для освобождения памяти, занятой массивом применяются следующие функции:
void free (void *block);
Освобождает блок памяти, выделенный ранее функциями malloc и calloc, на который указывает block.
delete [] указатель; // размер массива не указывается
Практическая часть
1 Изучите теоретическую часть.
2Разработайте программу, в которой пользователь с помощью меню может осуществить действия одного из вариантов заданий. Двумерный массив, значения которого вводит пользователь, должен быть размещен в динамической памяти.
Вариант 1
- заполнить массив, содержащий 6х6 элементов, целыми числами;
- для каждой строки найти минимальный и максимальный элементы и заменить их разностью элемент этой же строки, лежащий на главной диагонали массива.
Вариант 2
- заполнить массив, содержащий 5х5 элементов, целыми числами;
- найти величину среднего арифметического элементов каждой строки массива и заменить данной величиной элемент этой же строки, лежащий на главной диагонали массива.
Вариант 3
- заполнить массив, содержащий 4х4 элементов, целыми числами;
- для каждой строки найти произведением четных положительных элементов и заменить данной величиной элемент этой же строки, лежащий на главной диагонали массива.
Вариант 4
- заполнить массив, содержащий 6х6 элементов, целыми числами;
- для каждой строки найти минимальный и максимальный элементы и заменить их суммой элемент этой же строки, лежащий на побочной диагонали массива.
Вариант 5
- заполнить массив, содержащий 5х5 элементов, вещественными числами;
- найти сумму отрицательных элементов каждой строки массива и заменить данной величиной элемент этой же строки, лежащий на главной диагонали массива.
Вариант 6
- заполнить массив, содержащий 6х6 элементов, целыми числами;
- найти сумму четных элементов каждой строки массива и заменить данной величиной элемент этой же строки, лежащий на побочной диагонали массива.
Вариан