ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 180
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
41
type str=string[100]; var s1 : str; k1 : integer; function count(var s:str) : integer; var i, k : integer; begin k:=0; for i:=1 to length(s) do if s[i] in ['0'..'9', '+', '–', '*'] then k:=k+1; count:=k end; begin writeln('Введите строку'); readln(s1); k1:=count(s1); writeln('Количество цифр и знаков – ', k1:5); end.
Задача 2.9. type M=set of 0..99;
Описать функцию card(A), подсчитывающую количество элементов
множества A типа M (ноль используйте как прекращение ввода). (Напри-
мер, card([5,8,23])=3.)
Переменные: а) в функции card:
A — множество (формальный параметр); p — счетчик цикла от 0 до 99 (локальная переменная); k — количество элементов множества А (локальная переменная); б) в основной программе: x — введенное число (локальная переменная); b — созданное множество (локальная переменная); k1 — количество элементов в созданном множестве (фактический параметр).
Алгоритм решения задачи:
1)
создаем функцию card, подсчитывающую количество элементов множества;
2)
организуем пустое множество;
3)
в цикле repeat … until вводим числа до тех пор, пока не ввели 0, и дописываем их во множество;
4)
вызываем функцию card и выводим значение счетчика k1 на экран;
5)
завершаем работу программы. type M=set of 0..99; var b : m; k1, x : integer; function card(A:M) : integer;
42
var p,k : integer; begin k:=0; for p:=0 to 99 do if p in A then k:=k+1; card:=k end; begin b:=[ ]; repeat write('Введите число >0<=99 – '); readln(x); b:=b+[x]; until x=0; k1:=card(b); writeln('Количество различных эле- ментов множества', k1); end.
Задача 2.10. Программа. Дана строка из строчных латинских букв.
Напечатать первые вхождения букв в текст, сохраняя их исходный вза-
имный порядок.
Переменные: let — множество малых латинских букв; c — очередной символ строки; s — введенная строка; i — переменная цикла.
Алгоритм решения задачи:
1)
организуем пустое множество let;
2)
вводим строчку s;
3)
организуем цикл, в котором просматриваем символы строки s до тех пор, пока не встретим ‘.’, и проверяем, входит ли этот символ во мно- жество let (т.е. символ — малая латинская буква);
4)
если очередной символ строки не входит во множество let, то этот символ встретился впервые; выводим его на экран и дописываем во мно- жество;
5)
завершаем работу программы. var let : set of 'a'..'z'; s : string; c : char; i : integer; begin let:=[ ]; {множество букв в рассмотренной части текста} readln(s); i:=1; while s[i]<>'.' do begin if not(s[i] in let) then {1-е вхождение} begin write(s[i]); c:=s[i]; let:=let+[c] end; i:=i+1; end; writeln end.
43
Варианты
заданий
лабораторной
работы
№
2
Вариант 1
Задача 1
Даны целые числа a
1
, a
2
, ..., a n
. Все члены последователь- ности с четными номерами, предшествующие первому по порядку члену со значением max (a
1
, a
2
, ..., a n
), домножить на max (a
1
, a
2
, ..., a n
).
Задача 2
Спортлото: 6 из 49. Составьте программу, в которой загады- ваются, иначе говоря, создаются 6 разных чисел, значения которых никак не связаны друг с другом, а величина лежит в интервале от 1 до 49.
Указание. Для решения задачи используйте множества. Вы- ражение random(49) +1 дает случайное целое число в интер- вале от 1 до 49.
Вариант 2
Задача 1 var k : integer; c : array[1..n, 1..m] of char;
Определить k — количество различных элементов массива c
(т.е. повторяющиеся элементы считать один раз).
Указание: для хранения счетчиков для всех символов ис- пользовать массив типа array[char] of integer.
Задача 2
В возрастающем порядке напечатать все целые числа из диа- пазона 1..255, представимые в виде n
2
+ m
2
, где m, n
≥ 0.
Указание. Для решения задачи используйте множества.
Вариант 3
Задача 1 var k : integer; c : array[1..n, 1..m] of integer;
Определить k — количество «особых» элементов массива c, считая элемент «особым», если в его строке слева от него на- ходятся элементы, меньшие его, а справа — большие.
Указание: определите булевскую функцию f(x), которая про- веряет, является ли элемент x «особым».
Задача 2
Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно один раз.
Указание: решение задачи простое, если вы будете использо- вать множества.
44
Вариант 4
Задача 1
Дана матрица целых чисел размером MxN. Найти номера строки и столбца наибольшего элемента матрицы.
Задача 2
Дана строка. В алфавитном порядке напечатайте все малые латинские буквы, не входящие в эту строку.
Указание: решение задачи простое, если вы будете использо- вать множества.
Вариант 5
Задача 1
Даны действительные числа a
1
, a
2
, ..., a n
, b
1
, b
2
, ..., b n
Вычислить (a
1
+ b n
) * (a
2
+ b n–1
)* ... *(a n
+ b
1
).
Задача 2
Спортлото: 5 из 36. Составьте программу, в которой загады- ваются, иначе говоря, создаются 5 разных чисел, значения которых никак не связаны друг с другом, а величина лежит в интервале от 1 до 36.
Указание: решение задачи простое, если вы будете использо- вать множества. Выражение random(36) +1 дает случайное целое число в интервале от 1 до 36.
Вариант 6
Задача 1
Даны координаты n точек на плоскости: x
1
, y
1
, ..., x n
, y n
. Най- ти номера двух точек, расстояние между которыми наиболь- шее (считать, что такая пара точек единственная).
Задача 2
Напечатать все натуральные числа от 10 до 32767, в десятич- ной записи которых нет одинаковых цифр.
Указание: решение задачи простое, если вы будете использо- вать множества. Необходимо для каждого числа создавать множество, состоящее из цифр числа. При этом проверять: если очередная цифра числа есть уже во множестве, то такое число не надо выводить на экран.
Вариант 7
Задача 1
Определить, является ли заданная целая квадратная матрица n-го порядка магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы.
Пример магического квадрата:
0 1 2 3 4 1 2 3 4 0 2 3 4 0 1 3 4 0 1 2 4 0 1 2 3
45
Задача 2
Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку более од- ного раза.
Указание: решение задачи простое, если вы будете использо- вать множества.
Вариант 8
Задача 1
Дана последовательность из n целых чисел. Определить ко- личество инверсий в этой последовательности (т.е. таких пар элементов, в которых большое число находится слева от меньшего: x i
> x j
при i < j).
Задача 2
Дана строка. В алфавитном порядке напечатайте (по разу) все строчные латинские согласные буквы, входящие в эту строку.
Указание: гласные буквы — а, e, i, o, u; остальные — соглас- ные. Решение задачи простое, если вы будете использовать множества.
Вариант 9
Задача 1 type вектор = array [1..n] of integer; (n – четно) матрица = array [1..n] of вектор; var A : матрица; x : вектор;
В матрице A поменять местами 1-ю и 2-ю строки, 3-ю и 4-ю строки,..., (n–1)-ю и n-ю строки (воспользоваться x как вспо- могательным массивом).
Задача 2
Дана строка символов. Подсчитайте количество различных латинских малых букв, входящих в данную строку.
Указание: решение задачи простое, если вы будете использо- вать множества.
Вариант 10 Задача 1 var A : array [1..6,1..6] of boolean;
B : array [1..5,1..5] of boolean; n,k : 1..6;
Получить массив B из массива A удалением n-ой строки и k- го столбца.
Задача 2
Дана строка. В алфавитном порядке напечатайте (по разу) все большие латинские гласные буквы, входящие в эту стро- ку.
46
Указание: гласные буквы — а, e, i, o, u; остальные — соглас- ные. Решение задачи простое, если вы будете использовать множества.
Вариант 11 Задача 1 const n =..; var A,B,C : array [1..n,1..n] of real;
Вычислить С = (A+B)
2
(сумма двух матриц A и B возводится в квадрат).
Указание: определите процедуру с параметрами для сложе- ния матриц и процедуру с параметрами для возведения мат- рицы в квадрат.
Задача 2
Дана строка из строчных латинских букв. Напечатайте все буквы, входящие в текст не менее двух раз.
Указание. Просматривая в цикле символы текста, формируй- те два множества: одно содержит уже просмотренные симво- лы, другое наполняется теми элементами, которые входят в первое множество.
Вариант 12 Задача 1 const n = ...; var x, y : array [1..n] of real;
Дано k (1 <= k <= n–1). Преобразовать массив x по следую- щему правилу (воспользоваться массивом y как вспомога- тельным): элементы массива x циклически сдвинуть на k по- зиций влево.
Подсказка: определить процедуру для сдвига массива на 1 позицию влево и применить ее k раз.
Задача 2
Дана строка. Определить, каких букв больше в этом тексте: латинских строчных гласных или согласных.
Указание: гласные буквы — а, e, i, o, u; остальные — соглас- ные. Решение задачи простое, если вы будете использовать множества.
Вариант 13 Задача 1 var A : array [1..n,1..n] of real;
Найти сумму элементов из области матрицы А, отмеченной символом '*' (диагонали входят в выделенную область):
* * * * * * *
0 * * * * * 0 0 0 * * * 0 0
47 0 0 0 * 0 0 0 0 0 * * * 0 0 0 * * * * * 0
* * * * * * *
Задача 2
Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза.
Указание: решение задачи простое, если вы будете использо- вать множества.
Заведите три множества X1, X2 и X3 (сначала эти множества пустые). И в цикле просмотрите все символы из введенной строки. С каждым символом — маленькой латинской буквой — выполняйте следующие действия:
1.
Если этого символа нет в X1, то поместите его туда
(после окончания цикла множество X1 содержит все символы из строки).
2.
Если этот символ есть в X1 и нет в X2, то поместите этот символ в X2 (после окончания цикла множество
X2 содержит все символы из строки, которые там встречаются более одного раза).
3.
Если этот символ есть в X1 и в X2, то поместите этот символ в X3 (после окончания цикла множество X3 со- держит все символы из строки, которые там встреча- ются более двух раз).
После окончания цикла распечатайте в алфавитном порядке все элементы из разности множеств X2–X3.
Это будет ответ.
(Используйте цикл for c:=’a’ to ‘z’ do если c входит в X2–X3, то печать c. )
Вариант 14 Задача 1
Даны натуральное n и (построчно) элементы квадратной ве- щественной матрицы А четвертого порядка. Вычислить n-ю степень этой матрицы (A
1
= A; A
2
= A*A; A
3
= A
2
* A и т.д.).
Указания: 1. Определите процедуру mult(a,b,c) для умноже- ния матриц (a*b = c).
2. Для вычисления n-ой степени матрицы поступайте так же, как при вычислении в цикле n-ой степени числа, но вместо умножения чисел используйте процедуру mult.
48
Задача 2
Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские гласные буквы, входящие в эту строку ровно 3 раза.
Указание: гласные буквы — а, e, i, o, u; остальные — соглас- ные. Решение задачи простое, если вы будете использовать множества.
Вариант 15 Задача 1
Даны действительные числа a
1
, a
2
, ..., a n
, a n
, ... , a
2n
. Получить max (a
1
+ a
2n
, a
2
+ a
2n – 1
, ... , a n
+ a n+1
); min(a
1
* a n
, a
2
* a n+1
, ..., a
n+1
* a
2n
).
Задача 2
Напечатать все натуральные числа от 10 до 32767, в десятич- ной записи которых нет одинаковых цифр.
Указание: решение задачи простое, если вы будете использо- вать множества. Необходимо для каждого числа создавать множество, состоящее из цифр числа. При этом проверять: если очередная цифра числа есть уже во множестве, то такое число не надо выводить на экран.
Вариант 16 Задача 1 const n = ...; var s : array [1..n] of integer;
Напечатать те элементы массива s, которые являются пол- ными квадратами (1, 4, 9, 16, 25,...).
Подсказка. Число k является полным квадратом, если выпол- нено равенство k = (trunc(
k
))
2
Задача 2
Дана строка из строчных латинских букв. Напечатать первые вхождения букв в текст, сохраняя их взаимный порядок.
Указание: формируйте множество, в которое очередной эле- мент добавляется после первой печати.
Вариант 17 Задача 1
Даны целые числа a
1
, a
2
, ..., a n
, каждое из которых отлично от нуля. Если в последовательности отрицательные и положи- тельные члены чередуются (+, –, +, –,.... или –, +, –, +,...), то напечатать исходную последовательность. Иначе напечатать все отрицательные члены последовательности, сохранив по- рядок их следования.
Задача 2
Введите множество, состоящее из 20 целых чисел от 1 до 50.
Определите, сколько чисел, у которых последняя цифра 3, 5 или 7.
49
Вариант 18 Задача 1
Напечатать величины a
1
, a
2
, ..., a n
, где a
0 — заданное целое число, a
i
= a
[i / 2]
i 1
a
+ −
при i = 1, 2, ... n. [i/2] означает целую часть числа i/2.
Задача 2 type S = set of 0..50;
Описать функцию p (A), подсчитывающую произведение эле- ментов множества A типа S. (Например, sum ([5,8,23] = 920.))
Программа: введите множество A (ноль используйте как прекращение ввода). Выдайте, вызвав функцию p, произве- дение элементов множества A.
Вариант 19 Задача 1 var A : array [1..n,1..n] of real; (n–нечетно)
Найти сумму элементов из области матрицы А, отмеченной символом ' * ':
1 n
0 0 0 * 0 0 0 0 0 * * * 0 0 0 * * * * * 0
* * * * * * *
0 * * * * * 0 0 0 * * * 0 0 n 0 0 0 * 0 0 0
Задача 2
Создайте множество, состоящее из
1 2 3 4 5
простых чисел < 255 и дающее при делении на 4 остаток 3. Напечатайте элементы этого множества.
Вариант 20 Задача 1
Даны целые числа a
1
, a
2
, ..., a n
. Наименьший член последова- тельности a
1
, a
2
, ..., a n
заменить целой частью среднего ариф- метического всех членов, остальные члены оставить без изме- нения. Если в последовательности несколько членов со значением min(a
1
, a
2
, ..., a n
), то заменить последний по порядку.
Задача 2
Дана строка символов. В возрастающем порядке напечатайте все цифры, входящие в эту строку.
50
ЛАБОРАТОРНАЯ
РАБОТА
№
3
Лабораторная работа № 3 состоит из двух задач. Первая задача по- священа созданию программ, отражающих приемы работы с файлами. Не- обходимо в начале программы создать файл (элементы файла вводятся с клавиатуры или генерируются случайным образом), а в конце программы сначала вывести на экран содержимое созданного файла, а затем отразить полученные результаты. Во второй задаче необходимо составить програм- му, реализующую рекурсивный алгоритм.
В ходе выполнения лабораторной работы № 3 необходимо составить программы на языке Паскаль.
Примеры
решения
задач
Файлы
Задача 3.1. type series=file of real;Описать функцию neg(s), подсчи-
тывающую сумму отрицательных элементов в файле s типа series.
Переменные: а) основная программа: f — файл вещественных чисел (глобальная переменная); y — очередное число для записи в файл (глобальная переменная); n — сумма отрицательных элементов файла (глобальная переменная); k — счетчик цифр. б) функция neg: s — файловая переменная (локальная, формальная переменная); x — очередной элемент файла (локальная переменная); sum — сумма отрицательных элементов файла (локальная переменная).
Алгоритм решения задачи:
1)
свяжем файл proba.txt с файловой переменной f и откроем его для записи;
2)
организуем цикл, в котором вводим числа и записываем их в файл до тех пор, пока не введем 0;
3)
вызываем функцию neg, в которой открываем файл для чтения, считываем последовательно элементы файла и определяем сумму отрица- тельных элементов файла;
4)
выводим значение суммы на экран. type series=file of real; var f : series; n,y : real;