Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

poi_labs

.pdf
Скачиваний:
15
Добавлен:
14.02.2015
Размер:
786.93 Кб
Скачать

2)Даны квадратная матрица n-го порядка. Найти сумму элементов матрицы,

лежащих выше главной диагонали.

3)Дана целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента.

4)Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента.

5)Дана целочисленная прямоугольная матрица. Определить количество столбцов, содержащих хотя бы один нулевой элемент.

6)Дана целочисленная прямоугольная матрица. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов.

7)Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов.

8)Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

9)Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.

10)Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных ниже главной диагонали.

11)Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных выше главной диагонали.

12)Дана прямоугольная матрица действительных чисел. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.

13)Дана прямоугольная матрица действительных чисел. Найти номер первой из строк, содержащих хотя бы один положительный элемент.

14)Дана квадратная матрица действительных чисел. Найти сумму модулей

элементов, расположенных ниже побочной диагонали.

51

15)Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных выше побочной диагонали.

16)Дана прямоугольная матрица действительных чисел. Найти номер первого из столбцов, содержащих хотя бы один положительный элемент.

17)Найти номер первого из столбцов прямоугольной матрицы, не содержащих ни одного отрицательного элемента.

18)Найти номер первой из строк прямоугольной матрицы, не содержащих ни одного отрицательного элемента.

19)Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.

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

Контрольные вопросы

1)Дайте определение функции.

2)Чем заголовок функции отличается от заголовка программы?

3)Какие переменные называются локальными? Чем глобальные переменные отличаются от локальных? Можно ли локальной переменной дать имя,

совпадающее с именем глобальной переменной?

4)Какую роль при работе с функцией выполняют фактические параметры?

5)Каким образом осуществляется обмен данными между основной программой и функцией без параметров?

6)Сколько элементов может содержать список формальных параметров? Сколько элементов должен содержать список фактических параметров?

7)Могут ли фактические параметры быть выражениями? А именами других функций?

8)Каким образом передаются массивы в функцию?

9)Существуют ли ограничения на тип возвращаемого функцией значения?

10)Сформулируйте определение рекурсивной функции.

52

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

Работа со строками

Цель работы

Изучить работу со строками в языке С++:

Задачи занятия:

Изучить понятие строковых переменных и их формы представления в языка С++;

Изучить функции обработки строковых переменных в языка С++;

Изучить преобразование строковых переменных в цифровую форму и наоборот в языка С++;

Проработать примеры программ с использованием строк;

Разработать алгоритмы с использованием строк по индивидуальному варианту;

Написать и отладить программы, реализующие разработанные алгоритмы;

Составить и защитить отчет.

Задания

1. Изучите работу с символьным типом данных char, используя следующий фрагмент программы:

char s; s='a'; s=32; s='\b'

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

53

символьных переменных и констант компьютер выводит соответствующий коду символ.

В примере переменной s типа char последовательно присваивали следующие значения:

код латинской буквы a (как видите не обязательно запоминать таблицу кодов символов, а достаточно написать символ в одиночных кавычках);

код символа пробел 32;

Esc-последовательность представляющей собой пробел.

В диапазон типа char входят числа от -128 до 127, а коды русских букв имеют значения больше 127. Поэтому для работы с ними используйте тип

unsigned char.

2. Изучите понятие строковых переменных и их формы представления на следующих примерах.

char phrase[17];

unsigned char s[10]="Привет"; unsigned char s1[]="Привет";

В языке С++ нет стандартного типа для работы со строками. для этих целей используется массив символов. Концом строки считается символ '\0'

(т.е. 0). Все стандартные функции корректно вставляют 0 в конец строки, но если вы будите, что либо менять, не забывайте ставить "\0" в конце строки.

Во втором описании строка инициализирована непосредственно в операторе описания. Если не указывать размер "10", то размер массива будет выбран в соответсвии с количеством инициализирующих значений (с учетом завершающего нуль-символа).

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

54

phrase = "Вы напечатали строку:";

3. Изучите способы ввода строки, состоящей из нескольких слов, в одну

строковую переменную на следующем примере.

#include <iostream.h> #include <conio.h> int main(){

const int n = 80; char s[n];

cin.getline(s, n); cout << s << endl; cin.get(s, n); cout << s << endl; return 0;

}

Метод getline считывает из входного потока n - 1 символов или менее

(если символ перевода строки встретится раньше) и записывает их в

строковую

переменную s.

Символ

перевода

строки также

считывается

(удаляется)

из входного

потока,

но не

записывается в

строковую

переменную, вместо него размещается завершающий 0. Если в строке

исходных данных более п - 1 символов, следующий ввод будет выполняться

из той же строки, начиная с первого несчитанного символа.

Метод get работает аналогично, но оставляет в потоке символ перевода

строки. В строковую переменную добавляется завершающий 0.

4.Изучить стандартные функции работы со строками на следующих

примерах.

#include <string.h> #include <iostream.h> #include <conio.h> void main(){

char a[20]="hello", c[]=" from the srr"; strcat(a,c);

cout<< a<<', '<< c<<' '<< "\n"; //выведет hello from the srr, from the srr getch();

}

char a[20], c[20];

55

cout<<"\n Введите две строки "; cin>>a>>c;

if (strcmp(a,c))

cout<<"Строки не равны"<< "\n"; //выведет при разных строках "Строки не равны"

char string[10];

char *str1 = "abcdefghi"; strcpy(string, str1);

cout<< string; //выведет"abcdefghi"

char a[20]="1234567891011121314", c[]="34";

cout<< "\n"<< strstr(a,c); //выведет 34567891011121314

char string[10];

char *str1 = "abcdef";

cout<< strlen( str1); //выведет 6

В этих примерах были использованы следующие стандартные функции из библиотеки string.h:

char *strcat(char *str1, const char *str2) - присоединяет к строке str1

копию строки str2 и завершает строку str1 нулевым символом.

int strcmp(const char *str1, const char *str2) - сравнивает в лексикографическом порядке две строки и возвращает целое значение,: меньше нуля если str1 < str2, равно нулю если str1 == str2, больше нуля если str1 > str2.

char *strcpy(char *str1, const char *str2) - копирует содержимое строки str2 в строку str1.

char *strstr(const char *str1, const char *str2) - возвращает указатель на первое вхождение подстроки, адресуемой параметром str2, в строку, адресуемую параметром str1. Если совпадение не обнаружено, возвращается нулевой указатель.

size_t strlen(const char *str) - возвращает длину строки, адресуемой параметром str.

5.Выполнить задание на строки в соответствии с указанным преподавателем

вариантом.

Варианты

1) Задано слово произвольной длины. Определить, сколько раз в нем

встречается буква «и».

56

2)Определить, содержит ли заданное слово букву «д».

3)Задана строка произвольной длины. Вывести данную строку в обратном порядке.

4)Задано слово произвольной длины. Поменять в нем местами первую и последнюю букву.

5)Дана строка. Определить, заканчивается ли она точкой.

6)Задано произвольное слово. Определить, состоит ли оно из четного количества букв.

7)Задано слово произвольной длины. Проверить, начинается и заканчивается ли данное слово на одну и ту же букву.

8)Задана строка. Удалить из нее два последних символа.

9)Задано произвольное слово. Определить, состоит ли оно из 7 букв.

10)Дана строка. Подсчитать количество содержащихся в строке запятых.

11)Задано произвольное слово. Определить, начинается ли оно со слога «ка».

12)Задано слово произвольной длины. Поменять в нем местами первую и третью букву.

13)Задано слово произвольной длины. Поменять в нем местами последнюю и предпоследнюю букву.

14)Задано произвольное слово. Определить, заканчивается ли оно на слог

«ва».

15)Задано слово произвольной длины. Определить, содержится ли в нем три буквы «а»

16)Задано произвольное слово. Определить, состоит ли оно из 5 либо 6 букв.

17)Задано слово произвольной длины. Удалить из него последний символ.

18)Заменить в заданной строке все точки восклицательными знаками.

19)Найти количество пробелов в заданной строке произвольной длины.

20)Задано произвольное слово. Определить, заканчивается ли оно на букву

«а» либо «о».

57

Контрольные вопросы

1)Как описывается символ, строка?

2)Какие операции можно выполнять над строками? 2. Стандартные функции работы со строками.

4. Ввод-вывод текстовой информации.

58

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

Работа со структурами

Цель работы

Изучить работу со структурами в языке С++:

Задачи занятия:

Изучить понятие структуры, способы объявления структур и переменных типа структуры в языке С++;

Изучить синтаксис доступа к отдельным членам структуры и присваивание структурных переменных в языка С++;

Изучить преобразование строковых переменных в цифровую форму и наоборот в языка С++;

Проработать примеры программ с использованием строк;

Разработать алгоритмы с использованием строк по индивидуальному варианту;

Написать и отладить программы, реализующие разработанные алгоритмы;

Составить и защитить отчет.

Задания

1) Изучите особенности работы со структурным типом данных, используя следующую программу:

#include <stdio.h> int main(void)

{

struct { int a; int b; } x, y;

x.a = 10;

59

y = x; /* присваение одной структуры другой */ printf("%d", y.a);

return 0;

}

Общий вид объявления структуры такой:

struct тег {

тип имя-члена;

тип имя-члена;

}переменные-структуры;

Вобщем виде использование оператора точка для доступа к члену

структуры выглядит таким образом: имя-объекта.имя-члена

Информация, которая находится в одной структуре, может быть присвоена другой структуре того же типа при помощи единственного оператора присваивания.

Структуры часто образуют массивы.

2)Выполнить задание на структуры в соответствии с указанным преподавателем вариантом. Для всех вариантов дан список, содержащий не менее 10 записей определенной структуры. Разработать программу,

выполняющую следующие функции: ввод данного списка в массив записей, вывод массива записей на экран и выполнение запроса.

Варианты

1)Структура записей: Шифр книги (строка 5 символов), Ф.И.О. авторов

(строка 20 символов), Название (строка 15 символов), Год издания (целое число). Запрос: Поиск книг, изданных в 1960 году и шифром,

начинающимся с буквы "А" с выводом найденных записей на экран.

2)Структура записей: Шифр товара (строка 5 символов), Наименование

(строка 20 символов), Цена в руб. (вещественное число), Количество

(целое число). Запрос: Поиск товаров, имеющих цену меньше 20000 руб. и

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]