Programmirovanie_-_1_kurs / Методические указания к лабораторным работам 3-4
.pdfисходный код программ (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
Вариант №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 |
|