Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧКА прикладное ПРОГРАМ.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.06 Mб
Скачать

Задания для лабораторной работы:

1. Определить самое длинное слово в тексте. Разделители между словами- символы точка, запятая, точка с запятой, пробел. Между двумя словами может быть несколько разделительных символов.

2. Написать функцию вставки подстроки в строку.

3. Написать функцию сравнения двух строк.

4. Написать функцию поиска подстроки в строке.

5. Написать функцию, которая проверяет, есть ли в полученной ею в качестве параметра строке точка и пробел перед каждой заглавной буквой, кроме  первой (алфавит  латинский). Если нет, то функция вставляет их.

6. Напишисать функцию, которая вставляет пробел после каждой точки в строку, полученную ей в виде параметра.

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

8. Написать функцию, которая возвращает преобразованную к верхнему регистру строку, полученную в качестве аргумента. Строка может содержать буквы латинского алфавита, цифры, пробел и знаки препинания.

9. Предложите два варианта функции, удаляющей из строки ведущие и концевые пробелы.

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

1.Какой размер одномерного символьного массива должен быть объявлен для записи в него строки из 5 символов?

2.Как организуются многомерные символьные массивы ?

3. Как организуется индексирование символьных массивов?

4. На кого или на что возлагается контроль границ символьных массивов?

5.Как следует объявить символьный массив для записи в него трех строк различной длины?

6.Как следует организовать посимвольное заполнение одномерного массива?

7.Сколько потребуется операторов цикла для вывода на консоль двухмерного символьного массива (строк различной длины)?

8.Какие функции используются для считывания с консоли символьных массивов?

9.Для каких функций включаются в программу заголовочные файлы ctype.h и string.h?

Лабораторная работа № 32-33 «Использование динамических массивов структур»

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

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

- оформлять документацию на программные средства;

- использовать инструментальные средства для автоматизации оформления документации;

знать:

- основные этапы разработки программного обеспечения;

- основные принципы технологии структурного и объектно-ориентированного программирования;

- методы и средства разработки технической документации.

Краткие теоретические и учебно-методические материалы

по теме лабораторной работы

Принятое распределение памяти в языке Си/С++ следующее:

Стек

Свободная память

Раздел глобальных

Переменных и констант

Код программы

Верхние адреса

Нижние адреса

Для глобальных переменных отводится фиксированное место в памяти на все время работы программы. Локальные переменные хранятся в стеке. Между ними находится область свободной памяти для динамического распределения. Наиболее важными операциями для динамического распределения памяти являются new, new [], delete, delete []. Они используются для динамического распределения свободной памяти. Операции new и new [] выделяют память, а операции delete и delete [] освобождает ее.

Две операции new предназначены для выделения участков свободной памяти и размещения в них переменных, а в случае new [] – массивов. Продолжительность существования созданных таким образом (динамических) переменных – от точки создания до конца программы или до явного освобождения соответствующего участка памяти применением операций delete ( delete [] – для удаления массивов).

Первая из рассмотренных операций предназначена для размещения в динамической памяти переменной заданного аргументом типа (кроме типов массивов) и имеет следующий вид: new имя_типа или new имя_типа ( выражение).

Вторая форма вызова помимо выделения памяти осуществляет ее инициализацию значением выражения. В обоих случаях результат операции имеет тип указателя того же типа, что и аргумент, т.е. имя_типа*, и значение адреса размещенной динамической переменной. Это значение нужно сохранить в какой-либо переменной-указателе, что обеспечит в дальнейшем доступ к динамической переменной по адресу.

Операции new возвращают адрес выделенного участка памяти или, если запрашиваемой памяти нет, NULL.

Приведем пример создания и использования двух динамических переменных:

int *i, *j;

i= new int;

j= new int (5);

*i= (*j) * (*j); // *i=25

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

Для размещения динамических массивов предусмотрена специальная операция new [], вызываемая следующим образом: new тип_элемента [].

Заметим, что не предусмотрено средств для инициализации динамических массивов.

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

int n;

double *p;

………

cin >> n;

p= new double [n];

Доступ к элементам динамического массива осуществляется точно также, как к статическим, например, к 5-му элементу приведенного выше массива можно обратиться как p[4] или *(р+4).

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

delete i;

delete j;

delete [] p;

Аргументами обеих операций delete служат указатели, значения которых были получены операциями new при размещении соответствующих динамических переменных.

Желательным является использование операций delete, соответствующих каждой вызванной программой new.

Приведем несколько примеров использования динамических массивов.

Пример: Вычислить сумму S =  a(i) * b(i), i=1,2,…,n, где n – задается в процессе выполнения программы.

# include <iostream.h>

# include <stdlib.h>

void main ()

{ int n,i;

double *pa, *pb, s;

cout << “ Размер массивов : ”);

cin >> n;

pa = new double [n];

if ( pa ==NULL) { cout << “ Недостаточно памяти для массива. \ n”);

return;

}

printf (“ Ввод массива А \ n”);

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

cin >> pa[i];

pb = new double [n];;

if ( pb ==NULL) { cout << “ Недостаточно памяти для массива. \n ”;

return;

}

cout << “ Ввод массива B \n”;

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

cin >> pb[i];

s=0;

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

s+= pa[i] * pb[i];

cout << “ s = ” << s;

delete [] pa; delete [] pb;

}

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