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

Programmirovanie_-_1_kurs / Методические указания к лабораторным работам 3-4

.pdf
Скачиваний:
58
Добавлен:
09.06.2015
Размер:
700.69 Кб
Скачать

исходный код программ (1) и (2);

результаты работы программы (1);

выводы.

6.4. Рекомендации по выполнению работы

6.4.1. Генерация случайных чисел

(варианты №№2, 5, 7, 8, 9, 13, 15)

Для генерации случайных чисел следует использовать функцию rand, описанную в заголовочном файле stdlib.h:

int rand(void);

Функция rand возвращает псевдослучайное целое число в диапазоне от 0 до 32767.

Чтобы сгенерировать случайное число в заданном диапазоне от нуля до X (X<32767) используйте операцию взятия остатка от деления значения функции rand на число

X+1:

int q = rand()%100;

//q – псевдослучайное число в диапазоне 0 - 99

Воснове функции rand лежит некоторая последовательность чисел. Каждый раз при новом вызове функции rand возвращается очередной элемент этой последовательности.

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

void main()

{

// Выводим на экран три случайных числа cout << rand() << " " << rand() << " "

<< rand();

}

50

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

6334 18467 41

Установить новое начальное значение для последовательности псевдослучайных чисел можно при помощи функции srand, также входящей в заголовочный файл stdlib.h:

void srand(int seed);

Таким образом, чтобы при каждом новом запуске программы функция rand генерировала новые наборы чисел, нужно устанавливать для последовательности псевдослучайных чисел в качестве начального значения некоторую изменяющуюся величину, например, текущее системное время (функция time, библиотека time.h):

void main()

{

//Устанавливаем в качестве начального

//значения последовательности текущее время srand(time(0));

//Выводим на экран три случайных числа

cout << rand() << " " << rand() << " " << rand();

}

Возможный результат при первом запуске программы:

25410 15339 11801

Возможный результат при втором запуске программы:

10404 13248 11840

6.4.2. Обеспечение уникальности значений внутри

массива

(варианты №№1, 2, 12, 13)

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

51

 

i=0

 

 

 

i<N

нет

 

 

да

 

 

 

Ввод X[i]

 

 

 

povtor = false

 

 

j=0

 

 

 

j<i

нет

 

 

да

 

 

да

X[i] == X[j]

нет

povtor = true

 

 

 

 

j=j+1

 

 

да

povtor

 

нет

 

 

 

Ошибка

 

 

 

i=i-1

 

 

 

 

i=i+1

 

 

Рисунок 10. Обеспечение уникальности значений массива

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

52

7. ЛАБОРАТОРНАЯ РАБОТА №4. Работа со строками

7.1. Цель работы

Цель настоящей работы – ознакомление со строками и строковыми функциями.

7.2. Постановка задачи

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

Исходные строки вводятся с клавиатуры. Обработка строк должна осуществляться посимвольно (использование функций форматированного ввода scanf и sscanf не допускается).

7.2.1. Варианты заданий Вариант №1

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

Пример ввода: 1,2,3,4 Результат: 10

Вариант №2

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

Пример ввода: 1 abc 25 klm 0 34 11

Результат: 1 25 34 11

Вариант №3

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

Пример ввода: abc abcd fghj x y qwerty

53

Результат: abc x y

Вариант №4

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

Пример ввода: 2,1.5,33 Результат: 99

Вариант №5

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

Пример ввода:

строка 1: world;cat;dog;ball

строка 2: world;dog;processor;memory;programming

Результат: world dog

Вариант №6

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

Пример ввода: world dog processor memory student Результат: dog memory processor student world

Вариант №7

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

Пример ввода:

строка 1: world,cat,DOG,BALL

строка 2: World,dog,processor,memory,programming

Результат: cat ball

54

3 2.6 5 0 9.67
9 8 1 1 1

Вариант №8

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

Пример ввода: строка 1: 1 2 3 4 5 строка 2:

Результат: 10 10 4 5 6

Вариант №9

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

Пример ввода: строка 1: 1 2 3 80 0 строка 2:

Результат: 3 5.2 15 0 0

Вариант №10

Решить квадратное уравнение f(x)=0. Функция f(x) задается строкой следующего формата: axx bx c

Пример ввода: 2xx–8x+8 Результат: x1=2 x2=2

Вариант №11

Вычислить арифметическое выражение, заданное в формате строки. Строка может содержать целые числа, а также операции сложения и вычитания.

Пример ввода: 2+5–3+1 Результат: 5

55

Вариант №12

Проверить на корректность равенство, заданное в формате: a b=c d. Строка может содержать целые числа, операции сложения и вычитания, а также знак «равно».

Пример ввода: 2+3=6-1 Результат: Верно

Вариант №13

Проверить на корректность неравенство, заданное в формате строки: a b ? c d. Строка может содержать целые числа, операции сложения и вычитания, а также знаки «больше» и «меньше».

Пример ввода: 2+3>15–4 Результат: Не верно

Вариант №14

Решить линейное уравнение, заданное в формате строки: ax b=c

Пример ввода: 5x–8=2 Результат: x=2

Вариант №15

Решить линейное уравнение, заданное в формате строки: ax b=cx d

Пример ввода: 7x–3=2x+7 Результат: x=2

7.3. Требования к оформлению отчета

По данной лабораторной работе требуется подготовить отчет. Отчет должен включать в себя:

постановку задачи;

блок-схему программы;

исходный код программы;

таблицу тестовых данных и ожидаемых результатов;

56

результаты работы программы;

выводы.

8.КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Определите значения элементов A[1][2], A[2][1], A[1][4] двумерного массива A:

int A[3][6]={{1,2,3,4,5,6},{7,8,9,10,11,12}, {13,14,15,16,17,18}};

2. Корректно ли следующее объявление массива Q?

int n = 100; int Q[n];

3.Что определяет рабочий и фактический размер массива?

4.Какой алгоритм сортировки (сортировка выбором или сортировка «пузырьком») упорядочит по возрастанию значения следующего массива X за меньшее количество итераций?

int X[] = {1,2,3,6,4,5};

5.Определите, какие значения будут выведены на экран в результате работы следующего алгоритма:

int x[5]; x[0] = 1; x[1] = 3; for (int i=2; i<5; i++)

x[i] = x[i-1]+x[i-2]*2; cout << x[3] << " " << x[4];

6. Определите значения констант A, B и C:

enum {A, B, C};

7. Какой размер в памяти занимает массив Q?

double Q[3];

8. Определите конечное значение переменной A:

int A = 10; int &B = A; int C=5; B=C; A++; B++;

9.Определите, какие значения будут выведены на экран в результаты работы следующего алгоритма:

57

int x[]={2,4,6,8,10,12,14,16,18,20}; int* ptr1 = &(x[3]);

int* ptr2 = ptr1+3;

cout << *ptr1 << " " << (ptr2 - x) << " "

<<(*ptr2 - *x);

10.Какие данные содержатся в области кода и области данных памяти?

11.В какой области памяти размещаются динамические переменные?

12.Какой размер в памяти будет занимать строка str?

char str[] = "HELLO";

13. Определите содержимое строк res1, res2 и res3:

char res1[100] = "123456789"; strcat(res1, "ABCD"); strncpy(res1, "abcdefg", 4); char* res2 = res1+2;

char* res3 = strrchr(res1,'C');

9. ЛИТЕРАТУРА

1.С. В. Глушаков, А. В. Коваль, С. В. Смирнов. Язык программирования С++. Учебный курс. — М.:АСТ, 2001г. (ISBN 966-03-1282-2)

2.Бьерн Страуструп. Язык программирования С++.

— М.:Бином, 2008 г. (ISBN 5-7989-0226-2, 5-7940-0064-3, 0-201-70073-5)

3. Т.А.Павловская. С/С++. Программирование на языке высокого уровня. — СПб.:Питер, 2007г. (ISBN 978-5-94723-568-5)

4.В.В.Борисенко. Основы программирования. — М.:

ИНТУИТ, 2005г. (ISBN 5-9556-0039-6)

5.Б.И. Пахомов. C/C++ и MS Visual C++ 2008 для

начинающих. — СПБ.: БХВ-Петербург, 2009. (ISBN 978-5-9775-0267-2)

58

Учебно-методическое издание

Варфоломеев Алексей Викторович

Язык С++. Базовые алгоритмические конструкции

Методические указания к лабораторным работам по дисциплине «Алгоритмические языки и программирование»

для студентов направлений 230100.62 и 230400.62

Подписано к печати

 

 

Формат - 60х84/16

Усл. печ. л. –

Тираж – 100 экз.

Заказ №

Изд. № 147-11