Файл: Лабораторная работа Программирование циклических вычислительных процессов Для функции.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 189
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
{ int i, j; for(i = 0; i < m; i++) for(j = 0; j < n; j++) a[i][j] = A + rand() % (B - A + 1);
}
/* вывод матрицы на экран */ void PrintA(int a[][N], int m, int n)
{ int i, j; for (i = 0; i < m; i++)
{ for (j = 0; j < n; j++) printf("%5d", a[i][j]); printf("\n");
} printf("\n");
}
/* вычисление значений элементов массива b */ void InitB(int a[][N], int m, int n, int *b)
{ int i, j, count; for(i = 0; i < m; i++) for(j = count = 0; j < n; j++)
{ if (a[i][j] > 0 && a[i][j] % 10 == 1) count++; b[i] = count;
}
}
/* вывод массива на экран */ void PrintB(int *a, int n)
{ int i;
44
for(i = 0; i < n; i++) printf("%5d ", a[i]); printf("\n");
} int main( )
{ int a[M][N], b[M]; srand(time(NULL));
InitA(a, M, N);
PrintA(a, M, N);
InitB(a, M, N, b);
PrintB(b, M); return 0;
}
Уровень B
Требуется определить двумерный массив целых чисел (например, размера 5×7), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клави- атуры и преобразовать массив в соответствии с вариантом.
Программа должна содержать следующие функции:
• инициализация элементов двумерного массива случайными числами или вводимыми с клавиатуры;
• вывод двумерного массива на экран.
Варианты заданий
B1.
Задан прямоугольный массив целых чисел. Определить, есть ли такой элемент, который входит во все строки данного массива, но не во все столбцы, и напечатать его.
B2.
Символьный квадратный массив заполнен случайным набором симво- лов. Определить количество квадратиков, образованных совокупностью одинаковых символов, и их суммарную площадь. Квадратик – это образо- вание из не менее чем 4=2х2 одинаковых рядом стоящих символов. Разные квадратики могут быть заполнены разными символами.
B3.
В квадратный числовой массив записаны целые числа в диапазоне от A
45
} int main( )
{ int a[M][N], b[M]; srand(time(NULL));
InitA(a, M, N);
PrintA(a, M, N);
InitB(a, M, N, b);
PrintB(b, M); return 0;
}
Уровень B
Требуется определить двумерный массив целых чисел (например, размера 5×7), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клави- атуры и преобразовать массив в соответствии с вариантом.
Программа должна содержать следующие функции:
• инициализация элементов двумерного массива случайными числами или вводимыми с клавиатуры;
• вывод двумерного массива на экран.
Варианты заданий
B1.
Задан прямоугольный массив целых чисел. Определить, есть ли такой элемент, который входит во все строки данного массива, но не во все столбцы, и напечатать его.
B2.
Символьный квадратный массив заполнен случайным набором симво- лов. Определить количество квадратиков, образованных совокупностью одинаковых символов, и их суммарную площадь. Квадратик – это образо- вание из не менее чем 4=2х2 одинаковых рядом стоящих символов. Разные квадратики могут быть заполнены разными символами.
B3.
В квадратный числовой массив записаны целые числа в диапазоне от A
45
до B. Определить, имеются ли такие квадратные подмассивы, сумма эле- ментов которых равна P. Если таковые имеются, то вывести эти подмасси- вы на экран.
B4.
Задан прямоугольный массив целых чисел. Определить, все ли строки состоят только из разных чисел, и напечатать строки, имеющие в своем со- ставе одинаковые числа.
B5.
Квадратный числовой массив моделирует расположение непересекаю- щихся прямоугольников в квадрате, причем каждый прямоугольник запол- нен своим числом, отличным от нуля, а промежутки между ними заполнены нулями. Определить количество прямоугольников их общую площадь.
B6.
В квадратный числовой массив записаны целые числа в диапазоне от A до B. Отсортировать по убыванию элементы массива по строкам, а затем строки по убыванию первых элементов в строке. Результирующий массив вывести на экран.
B7.
В логическом квадратном массиве порядка 8, моделирующем шахмат- ную доску, значениям 1 соответствуют клетки, на которых расположены фигуры коня, 0 соответствует пустой клетке. Определить, имеются ли на доске фигуры, угрожающие другим, и напечатать их координаты.
B8.
В числовом прямоугольном массиве MxN каждый элемент равен числу вида 100*i+j, где 0≤i≤M-1, 0≤j≤N-1, или нулю. Это число показывает, на какую следующую клетку (i, j) массива следует перейти с данной клетки.
Нуль означает конец пути. Определить, можно ли таким образом посетить все клетки массива, начав с элемента (0, 0). Напечатать координаты начальной и конечной клеток, а также количество посещений.
B9.
В прямоугольной матрице найти количество строк, элементы которых упорядочены по возрастанию.
B10.
В частично заполненном значением 1 логическом квадратном массиве имеются свободные участки, моделируемые значением 0. Определить, можно ли разместить на них квадрат из значений 1 размером M. Если воз- можно, то напечатать массив со вставленным квадратом на экране.
B11.
В логическом квадратном массиве порядка 8, моделирующем шах- матную доску, значениям 1 соответствуют клетки, на которых расположе- ны фигуры ферзя, 0 соответствует пустой клетке. Определить, сколько
46
B4.
Задан прямоугольный массив целых чисел. Определить, все ли строки состоят только из разных чисел, и напечатать строки, имеющие в своем со- ставе одинаковые числа.
B5.
Квадратный числовой массив моделирует расположение непересекаю- щихся прямоугольников в квадрате, причем каждый прямоугольник запол- нен своим числом, отличным от нуля, а промежутки между ними заполнены нулями. Определить количество прямоугольников их общую площадь.
B6.
В квадратный числовой массив записаны целые числа в диапазоне от A до B. Отсортировать по убыванию элементы массива по строкам, а затем строки по убыванию первых элементов в строке. Результирующий массив вывести на экран.
B7.
В логическом квадратном массиве порядка 8, моделирующем шахмат- ную доску, значениям 1 соответствуют клетки, на которых расположены фигуры коня, 0 соответствует пустой клетке. Определить, имеются ли на доске фигуры, угрожающие другим, и напечатать их координаты.
B8.
В числовом прямоугольном массиве MxN каждый элемент равен числу вида 100*i+j, где 0≤i≤M-1, 0≤j≤N-1, или нулю. Это число показывает, на какую следующую клетку (i, j) массива следует перейти с данной клетки.
Нуль означает конец пути. Определить, можно ли таким образом посетить все клетки массива, начав с элемента (0, 0). Напечатать координаты начальной и конечной клеток, а также количество посещений.
B9.
В прямоугольной матрице найти количество строк, элементы которых упорядочены по возрастанию.
B10.
В частично заполненном значением 1 логическом квадратном массиве имеются свободные участки, моделируемые значением 0. Определить, можно ли разместить на них квадрат из значений 1 размером M. Если воз- можно, то напечатать массив со вставленным квадратом на экране.
B11.
В логическом квадратном массиве порядка 8, моделирующем шах- матную доску, значениям 1 соответствуют клетки, на которых расположе- ны фигуры ферзя, 0 соответствует пустой клетке. Определить, сколько
46
имеется на доске фигур, угрожающих другим, и удалить с доски те из них, которые угрожают двум или более фигурам.
B12.
В логическом квадратном массиве порядка 8, моделирующем шах- матную доску, значениям 1 соответствуют клетки, на которых расположе- ны фигуры слона, 0 соответствует пустой клетке. Определить, сколько имеется на доске фигур, угрожающих другим, и удалять их с доски до тех пор, пока слоны не будут угрожать друг другу. Напечатать количество оставшихся фигур. Результирующий массив вывести на экран.
B13.
В прямоугольной матрице найти количество столбцов, элементы ко- торых упорядочены по убыванию.
B14.
Упорядочить строки прямоугольной матрицы так, чтобы их первые элементы образовывали возрастающую последовательность.
B15.
В прямоугольной матрице найти количество столбцов, которые со- стоят из попарно различных элементов.
B16.
В прямоугольной матрице найти номер первого из ее столбцов, со- держащих максимальное количество одинаковых элементов.
B17.
В прямоугольной целочисленной матрице найти номер последней из ее строк, содержащих максимальное количество простых чисел.
Уровень C
Требуется определить двумерный массив целых чисел (например, размера 5×7), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клави- атуры и преобразовать массив в соответствии с вариантом задания.
Программа должна содержать следующие функции:
• инициализация элементов двумерного массива случайными чис- лами или вводимыми с клавиатуры;
• вывод двумерного массива на экран.
Варианты заданий
C1.
В квадратный числовой массив записаны целые числа в диапазоне от A до B. Отсортировать по убыванию элементы массива, расположенные по часовой стрелке по спирали, начиная с верхнего левого элемента. Резуль- тирующий массив вывести на экран.
47
B12.
В логическом квадратном массиве порядка 8, моделирующем шах- матную доску, значениям 1 соответствуют клетки, на которых расположе- ны фигуры слона, 0 соответствует пустой клетке. Определить, сколько имеется на доске фигур, угрожающих другим, и удалять их с доски до тех пор, пока слоны не будут угрожать друг другу. Напечатать количество оставшихся фигур. Результирующий массив вывести на экран.
B13.
В прямоугольной матрице найти количество столбцов, элементы ко- торых упорядочены по убыванию.
B14.
Упорядочить строки прямоугольной матрицы так, чтобы их первые элементы образовывали возрастающую последовательность.
B15.
В прямоугольной матрице найти количество столбцов, которые со- стоят из попарно различных элементов.
B16.
В прямоугольной матрице найти номер первого из ее столбцов, со- держащих максимальное количество одинаковых элементов.
B17.
В прямоугольной целочисленной матрице найти номер последней из ее строк, содержащих максимальное количество простых чисел.
Уровень C
Требуется определить двумерный массив целых чисел (например, размера 5×7), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клави- атуры и преобразовать массив в соответствии с вариантом задания.
Программа должна содержать следующие функции:
• инициализация элементов двумерного массива случайными чис- лами или вводимыми с клавиатуры;
• вывод двумерного массива на экран.
Варианты заданий
C1.
В квадратный числовой массив записаны целые числа в диапазоне от A до B. Отсортировать по убыванию элементы массива, расположенные по часовой стрелке по спирали, начиная с верхнего левого элемента. Резуль- тирующий массив вывести на экран.
47
C2.
Символьный квадратный массив заполнен случайным набором симво- лов. Найти цепочки, расположенные по вертикали и горизонтали и состо- ящие из цифр, преобразовать их в числа и напечатать на экране эти числа и их сумму.
C3.
Квадратный массив, элементами которого являются английские буквы и символ пробела, заполнен кроссвордом. Напечатать все слова в кросс- ворде с чередующимися гласными и согласными буквами и их количество.
C4.
Квадратный массив, элементами которого являются английские буквы и символ пробела, заполнен кроссвордом. Напечатать общее количество слов в кроссворде и все буквы, которые находятся на пересечении слов кроссворда.
C5.
В числовом квадратном массиве построить «спираль Улама» следую- щим образом: начиная с центрального элемента по спирали против часо- вой стрелки массив заполняется натуральными числами от 1 до N
2
. Опре- делить количество простых чисел в массиве.
C6.
Две строки матрицы назовем эквивалентными, если совпадают множе- ства элементов, встречающихся в этих строках, например, строки «1, 2, 1» и «2, 1, 2» эквивалентны. Найти количество строк матрицы, эквивалентных первой строке.
C7.
Найти минимальный среди элементов тех строк, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные строки в матрице отсутствуют, то вывести сообщение об этом.
C8.
Найти максимальный среди элементов тех столбцов, которые упорядо- чены либо по возрастанию, либо по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести сообщение об этом.
C9.
Упорядочить строки матрицы так, чтобы их минимальные элементы образовывали убывающую последовательность.
C10.
Два столбца матрицы назовем эквивалентными, если совпадают мно- жества элементов, встречающихся в этих столбцах, например, столбцы
«1,2,1» и «2,1,2» эквивалентны. Найти количество столбцов матрицы, эк- вивалентных первому столбцу.
48
Лабораторная работа № 9. Рекурсия
Уровень A
Требуется определить массив целых чисел (например, размера 30), заполнить его случайными числами или ввести его элементы с клавиатуры и определить его характеристики с помощью рекурсивной функции в соот- ветствии с вариантом задания. Проверку правильности результата прове- сти с помощью сравнения результатов итеративной и рекурсивной функций.
Программа должна содержать следующие функции:
• инициализация элементов массива случайными числами или вво- димыми с клавиатуры;
• вывод массива на экран;
• итеративная функция, вычисляющая характеристики массива в соответствии с вариантом задания;
• рекурсивная функция, вычисляющая характеристики массива в соответствии с вариантом задания.
Варианты заданий
A
1. В массиве целых чисел с помощью рекурсивной функции найти коли- чество четных элементов.
A2.
В массиве целых чисел с помощью рекурсивной функции найти коли- чество элементов массива, которые делятся на 5 и не делятся на 7.
A3
. В массиве целых чисел с помощью рекурсивной функции найти коли- чество простых чисел.
A4
. В массиве целых чисел с помощью рекурсивной функции найти сумму нечетных элементов.
A5.
Найти максимальный элемент целочисленного массива с помощью ре- курсии.
A6.
Вычислить сумму только симметричных элементов массива с помо- щью рекурсии.
A7.
В массиве целых чисел с помощью рекурсивной функции найти сумму таких элементов, которые состоят только из четных цифр.
49
A8
. В массиве целых чисел с помощью рекурсивной функции найти коли- чество элементов, больших заданного числа A.
A9.
В массиве целых чисел с помощью рекурсии найти количество мини- мальных элементов.
A10.
В массиве целых чисел с помощью рекурсии найти сумму элементов массива, расположенных в интервале (А, В).
A11.
Найти количество двузначных элементов массива с помощью рекур- сии.
A12.
Найти минимальный элемент целочисленного массива с помощью ре- курсии.
A13.
В массиве целых чисел с помощью рекурсии найти количество мак- симальных элементов.
A14.
Вычислить сумму только двузначных элементов массива с помощью рекурсии.
A15
. В массиве целых чисел с помощью рекурсивной функции найти сум- му элементов, заканчивающихся на 7.
A16
. В массиве целых чисел с помощью рекурсивной функции найти сум- му всех элементов массива, которые одновременно делятся на 3 и на 5.
A17
. В массиве целых чисел с помощью рекурсивной функции найти ко- личество элементов, начинающихся на 3.
1 2 3 4 5 6
Пример программы уровня A. В массиве целых чисел с помощью рекурсии найти количество таких элементов, первая цифра которых совпа- дает с последней.
#include
#include
#include
#include
#define N 10
#define A -50
#define B 50 50
/* инициализация элементов массива a случайными числами в диапазоне от A до B */ void Init(int *a, int n)
{ int i; for(i = 0; i < n; i++) a[i] = A + rand() % (B - A + 1);
}
/* вывод массива на экран */ void Print(int *a, int n)
{ int i; for(i = 0; i < n; i++) printf("%d ", a[i]); putchar('\n');
}
/* проверка, совпадает ли первая цифра числа a с последней */ int Check(int a)
{ int b = abs(a), c = b % 10; while (b > 9) b /= 10; return (b == c);
}
/* рекурсивная функция, вычисляющая количество таких элементов масси- ва, первая цифра которых совпадает с последней */ int CountRec(int *a, int *end)
{ return a < end ? Check(*a) + CountRec(a + 1, end) : 0;
}
51
/* итеративная функция, вычисляющая количество таких элементов масси- ва, первая цифра которых совпадает с последней */ int CountIt(int *a, int n)
{ int i, count; for(i = count = 0; i < n; i++) count += Check(a[i]); return count;
} int main( )
{ int a[N], i, count; srand(time(NULL));
Init(a, N);
Print(a, N); printf("count1 = %d\n", CountRec(a, a + N)); printf("count2 = %d\n", CountIt(a, N)); return 0;
}
Уровень B
Метод «разделяй и властвуй»
Требуется определить одномерный целочисленный массив a из n элементов (например, n=30), заполнить его случайными числами (в диапа- зоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клавиатуры и определить следующие его характеристики с по- мощью метода «разделяй и властвуй»:
• количество элементов массива, обладающих свойством Q;
• сумму элементов массива, обладающих свойством T;
• обладает ли хотя бы один элемент массив a свойством Q;
• все ли элементы массива a обладают свойством T.
Свойства Q и T задаются в индивидуальных вариантах. Проверку правиль- ности результата провести с помощью сравнения результатов итеративной и рекурсивной функций.
52
Программа должна содержать следующие функции:
• инициализация элементов массива случайными числами или вво- димыми с клавиатуры;
• вывод массива на экран;
• итеративная функция, вычисляющая количество элементов мас- сива, обладающих свойством Q;
• рекурсивная функция, вычисляющая количество элементов мас- сива, обладающих свойством Q;
• итеративная функция, вычисляющая сумму элементов массива, обладающих свойством T;
• рекурсивная функция, вычисляющая сумму элементов массива, обладающих свойством T;
• итеративная логическая функция, проверяющая, обладает ли хотя бы один элемент массивасвойством Q;
• рекурсивная логическая функция, проверяющая, обладает ли хотя бы один элемент массивасвойством Q;
• итеративная логическая функция, проверяющая, все ли элементы массива a обладают свойством T;
• рекурсивная логическая функция, проверяющая, все ли элементы массива a обладают свойством T.
Варианты заданий
B1. Q
: число является четным. T: число содержит в своем составе цифры
2 и 3.
B2. Q: число является положительным. T: число начинается с цифры 1.
B3. Q: число содержит цифру 1. T: число является простым.
B4. Q: число не содержит цифру 0. T: первая цифра числа совпадает с по- следней.
B5. Q: число является нечетным. T: число является составным.
B6. Q: число является простым. T: число содержит в своем составе цифру
5.
B7. Q: число является двузначным. T: число не содержит в своем составе цифру 7.
53
B8. Q: число является симметричным. T: число является трехзначным.
B9. Q: сумма цифр числа равна 10. T: число является четным.
B10. Q: число не содержит четных цифр. T: число является простым.
B11. Q: число является составным. T: число начинается с 2.
B12. Q: число начинается с 3. T: число является составным.
B13. Q: число является степенью двойки. T: первая цифра числа является нечетной.
B14. Q: число содержит хотя бы одну четную цифру. T: число содержит в младшем разряде цифру 3.
B15. Q: число содержит цифру 3. T: число является составным.
B16. Q: число является трехзначным. T: число содержит в своем составе цифру 2.
B17. Q: число является степенью тройки. T: число не содержит в своем со- ставе цифру 5.
Уровень C
Метод «разделяй и властвуй»
Требуется определить одномерный целочисленный массив a из n элементов (например, n=30), заполнить его случайными числами (в диапа- зоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клавиатуры и определить следующие его характеристики с по- мощью метода «разделяй и властвуй»:
• количество элементов массива, обладающих свойством Q;
• сумму элементов массива, обладающих свойством T;
• обладает ли хотя бы один элемент массив a свойством Q;
• все ли элементы массива a обладают свойством T.
Свойства Q и T задаются в индивидуальных вариантах. Проверку правиль- ности результата провести с помощью сравнения результатов итеративной и рекурсивной функций. Также требуется упорядочить массив по возрас- танию с помощью рекурсивной функции (алгоритм сортировки задается в варианте).
54
Программа должна содержать следующие функции:
• инициализация элементов массива случайными числами или вводи- мыми с клавиатуры;
• вывод массива на экран;
• итеративная функция, вычисляющая количество элементов массива, обладающих свойством Q;
• рекурсивная функция, вычисляющая количество элементов массива, обладающих свойством Q;
• итеративная функция, вычисляющая сумму элементов массива, об- ладающих свойством T;
• рекурсивная функция, вычисляющая сумму элементов массива, об- ладающих свойством T;
• итеративная логическая функция, проверяющая, обладает ли хотя бы один элемент массивасвойством Q;
• рекурсивная логическая функция, проверяющая, обладает ли хотя бы один элемент массивасвойством Q;
• итеративная логическая функция, проверяющая, все ли элементы массива a обладают свойством T;
• рекурсивная логическая функция, проверяющая, все ли элементы массива a обладают свойством T;
• рекурсивная сортировка элементов массива.
Варианты заданий
C1. Q: число является четным. T: число состоит из попарно различных цифр. Рекурсивно упорядочить массив с помощью метода прямого выбора.
C2. Q: число является положительным. T: только одна цифра в числе встречается ровно два раза, остальные – не более одного раза. Рекурсивно упорядочить массив с помощью метода вставок.
C3. Q: число содержит цифру 1. T: цифры в числе упорядочены по возрас- танию. Рекурсивно упорядочить массив с помощью пузырьковой сорти- ровки.
C4. Q: число не содержит цифру 0. T: число является симметричными в двоичном представлении. Рекурсивно упорядочить массив с помощью ме- тода прямого выбора.
55
C5. Q: число является нечетным. T: число является простым и не содержит в своем составе цифру 5. Рекурсивно упорядочить массив с помощью ме- тода вставок.
C6. Q: число является простым. T: в числе хотя бы одна цифра встречается более одного раза. Рекурсивно упорядочить массив с помощью пузырько- вой сортировки.
C7. Q: число является двузначным. T: число состоит только из простых цифр. Рекурсивно упорядочить массив с помощью метода прямого выбора.
C8. Q: число начинается на 1. T: каждая цифра, входящая в число, встреча- ется ровно два раза. Рекурсивно упорядочить массив с помощью метода вставок.
C9. Q: сумма цифр числа является четным числом. T: число является про- изведением двух различных простых чисел. Рекурсивно упорядочить мас- сив с помощью пузырьковой сортировки.
C10. Q: число является квадратом некоторого натурального числа. T: число является степенью некоторого простого числа. Рекурсивно упорядочить массив с помощью метода вставок.
56
Лабораторная работа № 10. Текстовые файлы
Текстовый файл – это последовательность строк, причем каждая строка заканчивается символом «\n». Текстовый файл состоит из обычных печатных символов (в кодах ASCII), включая пробелы, символы новой строки, символы табуляции. Например, в текстовом файле целое число 123 представлено тремя символами-цифрами «1», «2» и «3», которые в файле расположены друг за другом, образуя слово «123».
Требуется составить программу, выполняющую преобразования над текстовыми файлами согласно указанному варианту.
Уровень A
Варианты заданий
A1.
Напечатать все слова из текстового файла, начинающиеся на большую и заканчивающиеся на маленькую букву.
A2.
Напечатать все слова из текстового файла, содержащие хотя бы одну цифру.
A3.
Напечатать все слова из текстового файла, содержащие хотя бы одну маленькую латинскую букву.
A4.
Напечатать все слова из текстового файла, содержащие хотя бы одну большую латинскую букву.
A5.
Напечатать все слова из текстового файла, состоящие только из ма- леньких латинских букв.
A6.
Напечатать все слова из текстового файла, состоящие только из боль- ших латинских букв.
A7.
Напечатать все слова из текстового файла, состоящие только из цифр.
A8.
Напечатать все слова из текстового файла, состоящие не менее чем из четырех букв.
A9.
Напечатать все пятибуквенные слова из текстового файла.
A
10. Напечатать все слова из текстового файла, содержащие буквы и цифры.
A11.
Напечатать все слова из текстового файла, не содержащие ни одной цифры.
57
A12.
Напечатать все слова из текстового файла, не содержащие ни одной большой латинской буквы.
A13.
Напечатать все слова из текстового файла, содержащие ровно две цифры.
A14.
Напечатать все слова из текстового файла, содержащие две рядом стоящие одинаковые буквы.
A15.
Напечатать все слова из текстового файла, содержащие две рядом стоящие цифры.
A16.
Напечатать все слова из текстового файла, состоящие не более чем из пяти букв.
A17.
Напечатать все слова из текстового файла, состоящие только из ла- тинских букв.
Пример программы уровня A. Напечатать все слова из текстового файла, разделенные символами-разделителями «_.,;:\n\t!?», содержащие ровно две большие латинские буквы.
#include
#include
#define DELIMITERS " .,:;?!\n\t"
#define N 1024
/* количество больших латинских букв */ int Count(char *s)
{ int i, count; for(i = count = 0; s[i] != '\0'; i++) if (isupper(s[i])) count++; return count;
}
/* вывод всех слов с требуемым условием */ int ReadWords(char *fname)
58
{
FILE *f; char s[N], *word; int i, j, flag[256] = {0}; if ((f = fopen(fname, "r")) == NULL) return 1; for (i = 0; DELIMITERS[i]; i++) flag[DELIMITERS[i]] = 1; while (fgets(s, N, f) != NULL)
{ for (i = 0; s[i] && flag[s[i]]; i++)
; while (s[i])
{ word = s + i; while (s[i] && !flag[s[i]]) i++; j = i; while (s[i] && flag[s[i]]) i++; s[j] = '\0'; if (Count(word) == 2) puts(word);
}
} fclose(f); return 0;
} int main( )
{
ReadWords("c:\\a.txt"); return 0;
}
59
Уровень B
Выделить в текстовом файле все слова, разделенные символами- разделителями «_.,;:\n\t!?», и все слова, обладающие свойством Q, по- строчно записать в другой текстовый файл. Свойства Q задаются в инди- видуальных вариантах.
Варианты заданий
B1. Q: в слове нет арифметических знаков.
B2. Q: в слове нет гласных латинских букв.
B3. Q: слово состоит только из согласных латинских букв.
B4. Q: в слове присутствуют и цифры, и арифметические знаки.
B5. Q: в слове присутствуют и гласные, и согласные латинские буквы.
B6. Q: в слове нет согласных латинских букв и цифр.
B7. Q: в слове нет гласных латинских букв и арифметических знаков.
B8. Q: в слове присутствуют гласные латинские буквы.
B9. Q: в слове присутствуют согласные латинские буквы, но нет цифр.
B10. Q: в слове присутствуют цифры, но нет арифметических знаков.
B11. Q: в слове согласных латинских букв больше чем гласных.
B12. Q: в слове количество цифр равно количеству арифметических зна- ков.
B13. Q: в слове гласных латинских букв больше чем цифр.
B14. Q: в слове количество гласных латинских букв равно количеству арифметических знаков.
B15. Q: слово состоит только из гласных латинских букв и цифр.
B16. Q: слово состоит только из согласных латинских букв и является ре- гулярным.
B17. Q: в слове нет согласных латинских букв, и оно является симметрич- ным.
60
Уровень C
Выделить в текстовом файле все слова, разделенные символами- разделителями «_.,;:\n\t!?». Найти количество всех слов, которые обладают свойством Q. Все слова из исходного файла записать во второй файл по- строчно в алфавитном порядке в следующем виде:
<слово> – <количество повторений в исходном файле>.
Варианты заданий.
C1. Q: в слове нет повторяющихся символов.
C2
. Q: в слове все символы встречаются более одного раза.
C3
. Q: в слове хотя бы один символ встречается более одного раза.
C4
. Q: в слове только один символ встречается более одного раза.
C5
. Q: в слове латинские буквы чередуются с цифрами (например,
«a2b5s»).
C6
. Q: в слове гласные латинские буквы чередуются с согласными.
C7
. Q: в слове строчные латинские буквы чередуются с прописными.
C8
. Q: в слове буквы располагаются по возрастанию и не повторяются.
C9
. Q: в слове гласные латинские буквы чередуются с цифрами.
C10
. Q: в слове согласные латинские буквы чередуются с нечетными циф- рами.
61
Лабораторная работа № 11. Двоичные файлы. Базы данных
Уровень A
Разработать программу, реализующую простейшую базу данных, со следующими функциями:
• CreateFile(char *fileName) – создание двоичного файла данных, элементами которого являются записи со структурой, указанной в индивидуальном варианте.
• ReadFile(char *fileName) – просмотр записей во входном файле последовательно от первой до последней.
• Count(char *fileName) – подсчет количества записей в исходном файле в соответствии с вариантом.
Варианты заданий
A1.
АВТОМОБИЛИ
Входной файл содержит сведения об автомобилях: struct Rec
{ char mark[20]; // марка автомобиля long mas; // масса автомобиля в тоннах int year; // год выпуска double price; // цена
};
Найти количество самых новых автомобилей.
A
2. КАТАЛОГ СПОРТИВНЫХ ТОВАРОВ
Входной файл содержит сведения о спортивных товарах: struct Rec
{ char name
[20]; // наименование char type[20]; // вид спорта double price; // цена
};
Найти количество самых дорогих товаров.
62
A3.
КАТАЛОГ ЧАЙНОЙ ПРОДУКЦИИ
Входной файл содержит сведения о чайной продукции: struct Rec
{ char name
[20]; // производитель long mas
; // масса char type[20]; // тип чая (зеленый, черный,…) double price; // цена
};
Найти количество самых дорогих сортов чая.
A
4. КАТАЛОГ МОЛОЧНОЙ ПРОДУКЦИИ
Входной файл содержит сведения о молочной продукции: struct Rec
{ char name[20]; // производитель long mas; // масса char type[20]; // тип продукции (молоко, творог…) double price
; // цена
};
Найти количество творожной продукции в каталоге.
A
5. КАТАЛОГ МЕБЕЛЬНОЙ ПРОДУКЦИИ
Входной файл содержит сведения о мебельной продукции: struct Rec
{ char name[20]; // наименование long mas; // масса char type
[20]; // сорт древесины double price
; // цена
};
Найти количество самой тяжелой мебельной продукции.
A
6. КАТАЛОГ ЧАСОВ
Входной файл содержит сведения о часах:
63
struct Rec
{ char name
[20]; // производитель (наименование) char type[20]; // тип часов (механические, кварцевые…) double price
; // цена
};
Найти количество механических часов в каталоге.
A
7. ВИДЕОТЕКА
Входной файл содержит сведения о фильмах: struct Rec
{ char name
[50]; // название фильма char zhanr[20]; // жанр фильма long time; // продолжительность фильма
};
Найти количество самых продолжительных фильмов.
A
8. АУДИОТЕКА
Входной файл содержит сведения о музыкальных произведениях: struct Rec
{ char name[50]; // исполнитель (название группы) char zhanr[20]; // направление жанра long time
; // продолжительность в мин.
};
Найти количество самых коротких музыкальных произведений.
A
9. МОТОЦИКЛЫ
Входной файл содержит сведения о мотоциклах: struct Rec
{ char mark
[20]; // марка мотоцикла long mas
; // масса int year
; // год выпуска
64
{ char name
[20]; // производитель (наименование) char type[20]; // тип часов (механические, кварцевые…) double price
; // цена
};
Найти количество механических часов в каталоге.
A
7. ВИДЕОТЕКА
Входной файл содержит сведения о фильмах: struct Rec
{ char name
[50]; // название фильма char zhanr[20]; // жанр фильма long time; // продолжительность фильма
};
Найти количество самых продолжительных фильмов.
A
8. АУДИОТЕКА
Входной файл содержит сведения о музыкальных произведениях: struct Rec
{ char name[50]; // исполнитель (название группы) char zhanr[20]; // направление жанра long time
; // продолжительность в мин.
};
Найти количество самых коротких музыкальных произведений.
A
9. МОТОЦИКЛЫ
Входной файл содержит сведения о мотоциклах: struct Rec
{ char mark
[20]; // марка мотоцикла long mas
; // масса int year
; // год выпуска
64
double price; // цена
};
Найти количество самых тяжелых мотоциклов.
A
10. КАТАЛОГ ЮВЕЛИРНЫХ УКРАШЕНИЙ
Входной файл содержит сведения о ювелирных украшениях: struct Rec
{ char name
[30]; // наименование char type[30]; // материал (золото, серебро…) long mas; // масса double price
; // цена
};
Найти количество золотых украшений.
A11
. КАТАЛОГ КАНЦЕЛЯРСКИХ ТОВАРОВ
Входной файл содержит сведения о канцелярских товарах: struct Rec
{ char name
[30]; // наименование long mas; // масса double price; // цена
};
Найти количество тетрадей в каталоге.
A
12. БУТИК
Входной файл содержит сведения о товарах некоторого бутика: struct Rec
{ char name[30]; // наименование char country
[30]; // страна-производитель long size; // размер double price; // цена
};
Найти количество товаров из заданной страны.
65
};
Найти количество самых тяжелых мотоциклов.
A
10. КАТАЛОГ ЮВЕЛИРНЫХ УКРАШЕНИЙ
Входной файл содержит сведения о ювелирных украшениях: struct Rec
{ char name
[30]; // наименование char type[30]; // материал (золото, серебро…) long mas; // масса double price
; // цена
};
Найти количество золотых украшений.
A11
. КАТАЛОГ КАНЦЕЛЯРСКИХ ТОВАРОВ
Входной файл содержит сведения о канцелярских товарах: struct Rec
{ char name
[30]; // наименование long mas; // масса double price; // цена
};
Найти количество тетрадей в каталоге.
A
12. БУТИК
Входной файл содержит сведения о товарах некоторого бутика: struct Rec
{ char name[30]; // наименование char country
[30]; // страна-производитель long size; // размер double price; // цена
};
Найти количество товаров из заданной страны.
65
A
13. КОНДИТЕРСКИЕ ИЗДЕЛИЯ
Входной файл содержит сведения о кондитерских изделиях: struct Rec
{ char name
[30]; // наименование long mas; // вес double price; // цена
};
Найти количество самых дешевых кондитерских изделий.
A
14. БЫТОВАЯ ТЕХНИКА
Входной файл содержит сведения о товарах некоторого бутика: struct Rec
{ char name
[30]; // наименование char country
[30]; // страна-производитель long mas; // вес double price; // цена
};
Найти количество самых дорогих товаров.
A
15. ТОЧКИ ПЛОСКОСТИ
Входной файл содержит координаты точек трехмерного пространства: struct Rec
{ double x; // абсцисса double x; // ордината double x
; // аппликата
};
Найти количество тех точек плоскости, которые содержатся внутри окружности с центром в начале координат и радиуса R.
A
16. ПРАЗДНИЧНЫЕ ДНИ
Входной файл содержит сведения о праздничных днях: struct Rec
66
{ char name
[30]; // название праздника int day; // день char month[30]; // месяц
};
Найти количество праздничных дней, которые имеются в заданном месяце.
1 2 3 4 5 6
Уровень B
Разработать программу, основной блок которой в режиме «МЕНЮ» позволяет выбрать и запустить рабочие функции следующего назначения:
• CreateFileIn(char *fileName) – создание двоичного файла данных, элементами которого являются записи со структурой, указанной в индивидуальном варианте.
• AddFileIn(char *fileName) – добавление записей в конец входного файла.
• ReadFileIn(char *fileName) – просмотр записей во входном файле последовательно от первой до последней.
• CreateFileOut(char *fileName1, char *fileName2) – обработка дан- ных из входного файла по заданию индивидуального варианта и вывод результатов в выходной файл.
• ReadFileOut(char *fileName) – просмотр записей в выходном фай- ле последовательно от первой до последней.
Варианты заданий
B1.
КНИЖНЫЙ МАГАЗИН
Входной файл содержит сведения о книгах: struct Rec1
{ int nomer; // номер записи в файле char name[30]; // фамилия автора char nazv[30]; // название книги int year; // год издания float price; // цена
};
67
Требуется в выходной файл записать все те записи о книгах, которые являются самыми дорогими: struct Rec2
{ char name[30]; // фамилия автора char nazv[30]; // название книги int year; // год издания float price; // цена
};
B2.
ХАРАКТЕРИСТИКИ ПК
Входной файл содержит сведения о персональных компьютерах: struct Rec1
{ int nomer; // номер записи в файле char cpu[30]; // марка процессора int frecuency; // тактовая частота int ddr; // объем ОП в Мбайт int ssd; // объем SSD в Гбайт float price; // цена
};
Требуется в выходной файл записать сведения о всех тех ПК, кото- рые имеют наибольшую тактовую частоту: struct Rec2
{ char cpu[30]; // марка процессора int frecuency; // тактовая частота int ddr; // объем ОП в Мбайт int ssd; // объем SSD в Гбайт float price; // цена
};
B3.
ФИНАНСОВЫЕ ДОКУМЕНТЫ БУХГАЛТЕРИИ
Входной файл содержит информацию о работниках некоторой организа- ции:
68
struct Rec1
{ long nomer; // номер записи в файле char name[20]; // фамилия int year; // год рождения float zarpl; // заработная плата
};
Требуется в выходной файл записать все фамилии работников без повторения в отсортированном виде: struct Rec2
{ long nomer; // номер записи в файле char name[20]; // фамилия
};
B4
. СТУДЕНЧЕСКАЯ ГРУППА
Входной файл содержит сведения о студентах некоторой группы: struct Rec1
{ long nomer;
//номер записи в файле char name[3 0]; //фамилия int year; //
год рождения float sred
; //средний балл
};
Требуется в выходной файл записать сведения о тех студентах, кото- рые имеют наибольший средний балл: struct Rec2
{ char name[20]; // фамилия int year; // год рождения float sred; // средний балл
};
69
{ long nomer; // номер записи в файле char name[20]; // фамилия int year; // год рождения float zarpl; // заработная плата
};
Требуется в выходной файл записать все фамилии работников без повторения в отсортированном виде: struct Rec2
{ long nomer; // номер записи в файле char name[20]; // фамилия
};
B4
. СТУДЕНЧЕСКАЯ ГРУППА
Входной файл содержит сведения о студентах некоторой группы: struct Rec1
{ long nomer;
//номер записи в файле char name[3 0]; //фамилия int year; //
год рождения float sred
; //средний балл
};
Требуется в выходной файл записать сведения о тех студентах, кото- рые имеют наибольший средний балл: struct Rec2
{ char name[20]; // фамилия int year; // год рождения float sred; // средний балл
};
69