Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа ЯПВУ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

3. Указатели и двумерные массивы

Предположим, что у нас есть описания:

int z[4][2]; /**/

int *pz; /**/

Тогда pz=z указывает на нулевой столбец нулевой строки, т.е.

pz=&z[0][0];

Поскольку элементы двумерного массива хранятся в памяти ЭВМ по строкам, то

pz+1 = &z[0][1], pz+2 = &z[1][0], pz+3 = &z[1][1] и т.д.

Двумерный массив описан как массив массивов. Если z является именем массива, то каковы имена четырех строк, каждая из которых является массивом из двух элементов? Имя первой строки z[0], второй - z[1], и т.д. Однако имя массива является также указателем на этот массив в том смысле, что оно ссылается на первый его элемент. Значит:

z[0]=&z[0][0], z[1]=&z[1][0], z[2]=&z[2][0], z[3]=&z[3][0].

Пример 3.1. Задана матрица а. Вывести на экран элементы главной диагонали, первой строки и значений первых элементов каждой строки матрицы, применив для этого указатели.

{int a[3][3]={{10,20,30},

{40,50,60},

{70,80,90}};

/*объявление и инициализация двумерного массива*/

int i;

int *pa[3]={a[0],a[1],a[2]};

/*объявление и инициализация указателя ра на строки массива а и присвоение начальных значений*/

pa[0]=a[0]; pa[1]=a[1]; pa[2]=a[2];

int *p=a[0]; /*объявление указателя на нулевой элемент нулевой строки массива а*/

/*вывод на экран элементов главной диагонали*/

for (i=0;i<9;i+=4)

Label1->Caption=Label1->Caption+*(p+i)+" ";

/*вывод на экран элементов первой строки*/

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

Label1->Caption=Label1->Caption+p[i]+" ";

/*вывод на экран первых элементов каждой строки матрицы*/

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

Label1->Caption=Label1->Caption+ *pa[i]+" ";

}

Сделаем некоторые пояснения для первого оператора цикла. Представим матрицу в виде одномерного массива, записанного по строкам:

a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2]

Тогда элементы, стоящие на главной диагонали, занимают нулевое, четвертое и восьмое места, т.е. интервал между интересующими нас элементами равен четырем, поэтому переменная i изменяется с шагом 4. Соответственно с таким же шагом меняются адреса ячеек, содержимое которых выводится на экран.

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

Тема: Программирование задач обработки символьных данных в среде Си++Builder.

Цель работы: Знакомство с функциями и методами обработки строковых данных, при создании программ использовать компоненты вкладки Standard среды Си++Builder.

1 Порядок выполнения лабораторной работы:

1.1 Знакомство с теоретическим материалом, соответствующим теме лабораторной работы

1.2. Ответить на следующие вопросы:

Задание на строки

Группа А

1

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отпечатать все слова в столбец.

2

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отпечатать через пробел первые две буквы всех слов строки.

3

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отпечатать через пробел последние буквы всех слов строки.

4

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отпечатать слова, число N символов в которых удовлетворяют условию:2 < N < 7.

5

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Найти первое слово, начинающееся и заканчивающееся буквой "И".

6

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Найти слово "ТЕКСТ", если такое слово есть, то отпечатать его номер в строке. Если такого слова нет, то сообщить об этом.

7

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). В заданной символьной строке заменить все цифры на пробелы.

8

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). В заданной символьной строке каждый пробел заменить тремя пробелами.

9

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Для заданной символьной строки найти частоту встречаемости буквы "Я" по формуле P = S1/S ,где S - количество символов в строке; S1 - количество букв "Я".

10

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Выделить третье слово и отпечатать строку, в которой это слово повторяется пять раз через пробел.

11

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Вывести одномерный массив, элементами которого являются длины слов строки.

12

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Первое слово отделить от остальной части строки десятью пробелами.

13

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Удалить из строки все пробелы.

14

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Найти и отпечатать в столбец все слова, состоящие из двух букв.

15

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Найти и отпечатать первое слово, состоящее из пяти букв, если такого слова в строке нет, то отпечатать пять звёздочек.

16

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). В данной символьной строке выбрать и отпечатать в порядке их вхождения все цифры в виде одной строки.

17

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отсортировать слова в порядке возрастания их длин.

18

Дано слово из десяти букв. Для каждой буквы сформировать строку, в которой данная буква повторяется двадцать раз.

19

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отпечатать заданную символьную строку задом наперёд.

20

В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом точка("."). Отпечатать слово "Текст" столько раз, сколько оно встречается в данной строке.

Группа В

1.

Для данного текста исходной программы написать программу подсчёта частоты встречаемости арифметических операций +, -, *, /, div, mod.

2.

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

3.

Написать программу, которая из символьных строк s(1), s(2),..., s(n) и c(1), c(2), ... , c(m), (n >= m), формирует строку r(1), r(2), ... , r(n), где r(i)=s(i), если s(i)>c(i) или i > m , и r(i)=c(i) в остальных случаях.

4.

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

5.

Написать программу, преобразующую введенное c клавиатуры целое число типа longint в число, записанное русскими словами.

6.

В заданной строке найти M - число слов среди десяти, непосредственно следующих за первым словом, которые кончаются той же буквой, что и первое слово.

7.

Написать программу, которая определяет длину каждого слова в заданной строке и выводит слова наибольшей длины.

8.

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

9.

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

10.

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

11.

Написать программу, которая в заданной строке первое по порядку самое короткое слово заменяет на первое по порядку самое длинное слово.

12.

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

13.

В заданном тексте найти частоту встречаемости символа "К"и частоту встречаемости следующих друг за другом символов "А", "В"и "С".

14.

Найти число слов в тексте, в которые заранее заданная буква входит не менее двух раз.

15.

Найти R и Q - начало и конец самого длинного слова в тексте и L - число букв в этом слове.

16.

Найти R и Q - начало и конец слова, в котором заранее заданная буква входит наибольшее число раз, а также L - число вхождений этой буквы в такое слово.

17.

Все слова текста преобразовать по правилу: каждую из букв, предшествующих первому вхождению в данное слово заранее заданной буквы (или все буквы слова, если в него не входит эта буква) заменить другой заданной буквой.

18.

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

19

Если самое длинное слово текста не является последним словом в тексте, то сделать его первым словом (сохранив относительный порядок расположения других слов в тексте).

20.

В тексте поменять местами слова с заранее заданными номерами M и N (длины слов различны

Группа С

1

Задан текст из N предложений. В каждом предложении текста найти слова длина которых удовлетворяет условию 2 <=Ni<= 7 Результаты записать в строку с именем DLINA

2

Даны арифметические выражения, записанные на языке ПАСКАЛЬ. Написать программу проверки правильности расстановки круглых скобок. В каждой строке записывается по одному выражению Весь текст завершается строкой с единственным словом " END ".

3

Даны арифметические выражения. Написать программу проверки принадлежности символов строки к классу цифровых или буквенных. При выполнении условия напечатать номер символа, в противном случае - символ.

4

Для данного текста исходной программы на языке ПАСКАЛЬ написать программу подсчета частоты встречаемости арифметических операций +, -, *, /, DIV, MOD.

5

Для данного текста исходной программы на языке ПАСКАЛЬ написать программу печати идентификаторов, используемых в качестве меток (каждая метка стоит в начале строки и отделяется от остальной части строки двоеточием).

6

Написать программу, которая из символьных строкS(1), S(2), ... , S(n) и C(1), C(2), ... , C(m), (n >= m), формирует строку R(1), R(2), ... , R(n), где R(i) = S(i), если S(i) > C(i) или i > m ,и R(i) = C(i) в остальных случаях

7

Задан текст из N предложений. Найти в каждом предложении текста первое по порядку самое длинное и самое короткое слово и отпечатать их в столбец.

8

В исходной строке каждую букву слова с номером N заменить на первую букву слова с номером М .

9

В заданной строке найти M - число слов среди десяти, непосредственно следующих за первым словом, которые кончаются той же буквой, что и первое слово.

10

Написать программу, которая определяет длину каждого слова в заданной строке и выводит слова наибольшей длины.

11

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

12

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

13

На каждой странице - N предложений. На первой странице найти число слов в каждом предложении. На второй странице найти частоту встречаемости символа "A".На третьей странице найти в каждом предложении самое короткое слово и записать в строку TMIN.

14

Написать программу, которая в заданной строке первое по порядку самое короткое слово заменяет на первое по порядку самое длинное слово.

15

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

16

В заданном тексте найти частоту встречаемости символа "К" и частоту встречаемости следующих друг за другом символов "А", "В" и "С".

17

Найти число слов в тексте, начинающихся и кончающихся буквой, код которой задан значением переменной А.

18

Найти число слов в тексте, в которые заранее заданная буква входит не менее двух раз.

19

Найти R и Q - начало и конец самого длинного слова в тексте и L - число букв в этом слове.

20

Найти R и Q - начало и конец слова, в котором заранее заданная буква входит наибольшее число раз, а также L - число вхождений этой буквы в такое слово.

21

Все слова текста преобразовать по правилу: каждую из букв, предшествующих первому вхождению в данное слово заранее заданной буквы (или все буквы слова, если в него не входит эта буква) заменить другой заданной буквой.

22

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

23

Если самое длинное слово текста не является последним словом в тексте, то сделать его первым словом (сохранив относительный порядок расположения других слов в тексте)

24

В тексте поменять местами слова с заранее заданными номерами M и N ( длины слов различны ).

25

Задан текст из N предложений. Найти в каждом предложении текста первое по порядку самое короткое слово. Сформировать строку из найденных слов и отсортировать слова этой строки по значению длины каждого слова.

26

Задан текст из N предложений. Найти в каждом предложении текста первое по порядку самое длинное слово. Результат записать в строку с именем TMAX.

27

Заданный текст преобразовать по правилу: - последнюю букву первого слова заменить на его первую букву; - у пяти слов, непосредственно следующих за N - ым словом, первую букву заменить буквой " F ";

28

Задан текст из N предложений и слово, состоящее из пяти символов. Найти в каждом предложении текста слова, состоящие из пяти символов и заменить их на заданное слово. Определить номера найденных слов и зафиксировать их в матрице X[N..NC]. NC - максимально допустимое число слов в предложении.

29

Задан текст из трех страниц. На каждой странице -N предложений. На второй странице найти самое короткое слово. На третьей странице найти частоту встречаемости символа "К".

30

Задан текст из N предложений. Найти в каждом предложении текста первое по порядку самое длинное слово. Сформировать строку из найденных слов и отсортировать слова этой строки по значению кода первой буквы слова.

31

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

32

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