Решение задач на обработку последовательностей в паскале

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

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Пример работы с последовательностью

Последовательности — это абстрактный набор данных, которые можно перебирать.

В отличие от других структур последовательности не хранятся в памяти (поэтому «абстрактный»), т.е. память используется только в конкретный момент времени, когда происходит перебор значений последовательности, и, как правило, нам необходим только 1 элемент (в единицу времени).

Последовательностью может быть, например, последовательность чисел:

арифметическая прогрессия: 1 3 5 7 9

геометрическая прогрессия: 1 2 4 8 16

Тип последовательности: Sequence of Real , Sequence of Integer

Наиболее близким типом данных к последовательности является массив.

Рассмотрим стандартный пример работы с числовым рядом, БЕЗ использования последовательности:

begin var s:=0.0; for var i:=1 to 10 do begin var x:=ReadReal; s+=x; end; print(s) end.

Данный стиль написания программы считается плохим, т.к. основной алгоритм смешивается с вводом ( ReadReal ).

Ввод данных необходимо отсоединить от основного алгоритма. Для этого используем последовательность:

// накапливаем последовательность, переменная q хранит ее var q:=ReadSeqReal(10); var s:=0.0; foreach var x in q do s+=x; print(s) end.

Теперь алгоритм находится отдельно от ввода, программа стала более модифицируема.
Остается оформить основной алгоритм в виде функции:

function Sum(q: sequence of real):real; begin var s:=0.0; foreach var x in q do s+=x; result:=s end; begin print(Sum(ReadSeqReal(10))) end.

Генерация и формирование последовательностей

Итак, мы рассмотрели, как сформировать последовательность через ввод с клавиатуры:

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

Генераторы последовательностей:
Range(a,b: integer) : sequence of integer

Range(a,b,step: integer) : sequence of integer

Range(c1,c2: char) : sequence of char

Partition(a,b: real; n: integer) : sequence of real

print(Partition(0.0, 6.0, 4)); // делим поровну на 4 части [0, 1.5, 3, 4.5, 6]

SeqRandomInteger(n: integer[; a,b: integer]) : sequence of integer;

var q:=SeqRandomInteger(5,10,20); print(q); // [12,18,16,14,16]

SeqRandomReal(n: integer[; a,b: real]) : sequence of real;

var q:=SeqRandomReal(3, 1.0, 5.0); print(q); // [4.98996168374548,2.22339218166815,2.81110574389394]

Seq(params a: array of T) : sequence of T;

foreach var x in Seq (1,3,8) do print(x*x); // 1 9 64

SeqFill(count: integer; x: T) : sequence of T;

begin var q:=SeqFill(7,5); print(q); // [5,5,5,5,5,5,5] end.

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

Вывод последовательностей

Print(delim: string := ‘ ‘) : sequence of T;

var q:=SeqRandomInteger(5,10,20); q.Print(‘/’); // 16/11/13/10/13

Println(delim: string := ‘ ‘) : sequence of T;

Устанавливая рекомендуемое программное обеспечение вы соглашаетесь
с лицензионным соглашением Яндекс.Браузера и настольного ПО Яндекса .

Типовые задачи на Pascal с решениями

Задача: Написать программу которая по введеному номеру времени года(1-зима,2-весна,3-лето,4-осень)выдавала соответствующие этому времени года, месяцы количество дней в каждом из месяцев.

writeln ( ‘ Выберите время года :’ ) ; writeln ( ‘1- зима ‘ ) ;

writeln ( ‘2- весна ‘ ) ;

writeln ( ‘3- лето ‘ ) ;

writeln ( ‘4- осень ‘ ) ;

readln ( w ) ; case w of

writeln ( ‘ Зимние месяцы :’ ) ;

writeln ( ‘ декабрь — 31 день ‘ ) ;

writeln ( ‘ январь — 31 день ‘ ) ;

writeln ( ‘ февраль — 28(29) дней ‘ ) ;

writeln ( ‘ Весенние месяцы :’ ) ;

writeln ( ‘ март — 31 день ‘ ) ;

writeln ( ‘ апрель — 30 дней ‘ ) ;

writeln ( ‘ май — 31 день ‘ ) ;

writeln ( ‘Летние месяцы:’ ) ;

writeln ( ‘ июнь — 30 дней’ ) ;

writeln ( ‘ июль — 31 день’ ) ;

writeln ( ‘ август — 31 день ‘ ) ;

‘4’ : begin writeln ( ‘ Осенние месяцы :’ ) ;

writeln ( ‘ сентябрь — 30 дней ‘ ) ;

writeln ( ‘ октябрь — 31 день ‘ ) ;

Читайте также  Получить развернутую форму десятичных чисел

writeln ( ‘ ноябрь — 30 дней ‘ ) ;

end ; else write ( ‘Такого времени года нет!’ ) ;

Задача: Определить делителем каких чисел a,b,c является число k.

var a , b , c , k , s : integer ;

writeln ( ‘ Введите 3 целых числа :’ ) ; readln ( a , b , c ) ;

write ( ‘Введите целое число для проверки делимости k=’ ) ;

writeln ( ‘Число ‘ , k , ‘ делитель числа ‘ , a ) ;

writeln ( ‘Число ‘ , k , ‘ делитель числа ‘ , b ) ;

write ( ‘Число ‘ , k , ‘ делитель числа ‘ , c ) ;

if s = 0 then write ( ‘ Число ‘ , k , ‘ не является делителем чисел ‘ , a , ‘ ‘ , b , ‘ ‘ , c ) ; readln

Задача: Подсчитать количество отрицательных среди чисел a,b,c

var a , b , c : integer ;

clrscr; writeln ( ‘Введите 3 целых положительных и отрицательных числа:’ ) ;

readln ( a , b , c ) ;

k := ord ( a 0 ) + ord ( b 0 ) + ord ( c 0 ) ; если отрицательное , ord(true)=1

false, если не отрицательное, ord(false)=0>

write ( ‘Количество отрицательных=’ , k ) ; readln

Задача
Дан круг (X0, Y0, R) и точка (X, Y), где X0, Y0, R, X, Y — вещественные числа.
Определить, лежит ли эта точка внутри данного круга.
Пример
(0, 0, 1) и (0.5, 0.5)
Результат: TRUE
Вариант решения

var X0, Y0, R, X, Y: Real;

ReadLn (X0, Y0, R, X, Y);

WriteLn (Sqr (X — X0) + Sqr (Y — Y0)

Задача
Дан треугольник с вершинами (X1, Y1); (X2, Y2); (X3, Y3) и точка (X, Y). Все Xi, Yi — вещественные числа.
Определить, лежит ли эта точка внутри данного треугольника.
Пример
(0, 0); (3, 0); (0, 3) и (1, 1)
Результат: TRUE
Вариант решения

var X1, Y1, X2, Y2, X3, Y3, X, Y: Real;

S0, S1, S2, S3: Real;

function S (X1, Y1, X2, Y2, X3, Y3: Real): Real;

var a, b, c, p: Real;

a := Sqrt (Sqr (X1 — X2) + Sqr (Y1 — Y2));

b := Sqrt (Sqr (X1 — X3) + Sqr (Y1 — Y3));

c := Sqrt (Sqr (X3 — X2) + Sqr (Y3 — Y2));

S := Sqrt (p * (p — a) * (p — b) * (p — c));

ReadLn (X1, Y1, X2, Y2, X3, Y3, X, Y);

S0 := S (X1, Y1, X2, Y2, X3, Y3);

S1 := S (X, Y, X2, Y2, X3, Y3);

S2 := S (X1, Y1, X, Y, X3, Y3);

S3 := S (X1, Y1, X2, Y2, X, Y);

WriteLn (S0 + eps >= S1 + S2 + S3);

Задача
Дан прямоугольник, заданный двумя противоположными вершинами (X1, Y1); (X2, Y2) и точка (X, Y). Все Xi, Yi — вещественные числа.
Определить, лежит ли эта точка внутри данного прямоугольника.
Пример
(1, 1); (7, 4) и (4, 2)
Результат: TRUE
Вариант решения

var X1, Y1, X2, Y2, X, Y: Real;

ReadLn (X1, Y1, X2, Y2, X, Y);

WriteLn ((Abs (X1 — X2) = Abs (X1 — X) + Abs (X2 — X)) and

(Abs (Y1 — Y2) = Abs (Y1 — Y) + Abs (Y2 — Y)));

Задача
Дано число a (0..999999999).
Найти сумму цифер числа a.

Пример
a = 12345
Результат: 15

Задача
Дано число a (0..999999999).
Вывести это число в обратном порядке.
Пример
a = 12345
Результат: 54321
Вариант решения

Задача
Дано число a (0..999999999).
Определить, является ли оно простым.
Замечание: число называется простым, елси оно делится только на 1 и на самого себя.
Пример
a = 12345
Результат: FALSE
Вариант решения

var a, N: LongInt;

for N := 2 to a div 2 do

if a mod N = 0 then

Задача
Дано число a (0..999999999).
Разложить это число на простые множители.
Пример
a = 12345
Результат: 3 5 823
Вариант решения

var a, N: LongInt;

function Prost (X: LongInt): Boolean;

for N := 2 to X div 2 do

if X mod N = 0 then

if Prost (a) then

if (a mod N = 0) and Prost (N) then

Задача
Дано число S (0..999999999), обозначающее количество секунд.
Вычислить числа Hour, Minute (0..59), Second (0..59), показывающие число часов, минут и секунд соответственно в числе S.
Пример
S = 12345
Результат: 3:25.45
Вариант решения

Читайте также  Световая проекция на здание

Hour, Minute, Second: Integer;

Second := S mod 60;

Minute := S div 60;

Hour := Minute div 60;

Minute := Minute mod 60;

WriteLn (Hour, ‘:’, Minute, ‘.’, Second);

Задача
Дано натуральное число a (1..999999999).
Представить его в виде суммы квадратов двух натуральных чисел или сообщить о невозможности такого представления.
Пример
a = 29
Результат: 2, 5
Вариант решения

var a, n: LongInt;

for n := 1 to Trunc (Sqrt (a)) do

b := Sqrt (a — Sqr (n));

if (Int (b) = b) and (b > 0) then

WriteLn (n, ‘, ‘, Trunc (b));

Задача
Дано число a (1..999999999).
Определить, является ли оно совершенным.
Замечание: натуральное число называется совершенным, если оно равно сумме всех своих собственных делителей, включая 1.
Пример
a = 496
Результат: TRUE
Вариант решения

var a, i, S: LongInt;

for i := 2 to a div 2 do

if a mod i = 0 then Inc (S, i);

Задача
Даны два натуральных числа: m, n (1..999999999), образующие дробь вида m / n.
Сократить дробь, что бы числитель и знаменатель были взаимнопростые.
Пример
m = 256; n = 64
Результат: 4 1
Вариант решения

var m, n, i: LongInt;

if (m mod i = 0) and (n mod i = 0) then

Задача
Дана строка S, состоящая из латинских букв и пунктуационных знаков.
Преобразовать эту строку к верхнему регистру.
Пример
S = ‘Hello, World!’
Результат: HELLO, WORLD!
Вариант решения

for i := 1 to Length (S) do

Задача
Дана строка S, состоящая из латинских букв и пробелов.
Определить количество слов в данной строке.
Замечание: словом считается любая последовательность максимальной долины, состоящая из латинских букв и не содержащая пробелов.
Пример
S = ‘Hello World’
Результат: 2
Вариант решения

i, Count, State: Integer;

for i := 1 to Length (S) do

1: if UpCase (S[I]) in [‘A’..’Z’] then

2: if not (UpCase (S[I]) in [‘A’..’Z’]) then State := 1;

Задача
Дано 10 строк, вводимых с клавиатуры.
Вывести их в алфавитном порядке.
Пример
Marina
Aleksej
Sergej
Ivan
Peter
Lubov
Irina
Pavel
Natasha
Kostya

type TStrs = array[1..N] of string;

procedure Sort (var S: TStrs);

var i, j: Integer;

for i := 1 to N — 1 do

for j := i + 1 to N do

for i := 1 to N do

for i := 1 to N do

Задача
Дана строка S.
Определить, является ли она полиндромом.
Замечание: полиндромом называются строки, которые одинаково читаются как слева-направо, так и справа-налево.
Пример
S = ‘asdfgfdsa’
Результат: TRUE
Вариант решения

for i := 1 to Length (S) div 2 do

if S[i] <> S[Length(S)-i+1] then

Задача
Дана строка S, состоящая только из символов ‘0’ или ‘1’.
Подсчитать длинну самой длинной последовательности, состоящей только из ‘1’.
Пример
S = ‘111110011110110’
Результат: 5
Вариант решения

i, Len, MaxLen: Integer;

for i := 1 to Length (S) do

if Len > MaxLen then MaxLen := Len;

end else Inc (Len);

Задача
Дан массив A, состоящий из 100 натуральных чисел, заполненный случайным образом (каждый элемент находится в промежутка от 1 до 1000).
Отсортировать данный массив по неубыванию и вывести на экран.

var A: array[1..n] of Word;

i, j, tmp: Integer;

for i := 1 to n do

A[i] := Random (1000) + 1;

for i := 1 to n — 1 do

for j := n downto 2 do

for i := 1 to n do

Задача
Дан массив A, состоящий из 10 целых чисел.
Вывести все элементы, значение которых превосходит среднего арифметического элементов массива.
Пример
A: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Результат: 6, 7, 8, 9, 10
Вариант решения

var A: array[1..n] of Integer;

for i := 1 to n do

for i := 1 to n do

if A[i] > Sum div n then WriteLn (A[i]);

Читайте также  Резервная копия айфон на компьютере как найти

Задача
Дана матрица A размерностью 3 x 3, состоящая из целых чисел.
Найти разность между максимальным и минимальным элементами данной матрицы.
Пример
A:
12 44 37
8 25 32
19 28 41
Результат: 36
Вариант решения

var A: array[1..3,1..3] of Integer;

i, j, Max, Min: Integer;

for i := 1 to 3 do

for j := 1 to 3 do

for i := 1 to 3 do

for j := 1 to 3 do

if Min > A[i,j] then Min := A[i,j];

WriteLn (Max — Min);

Задача
Дана матрица A размерностью 5 x 5.
Заполнить ее следующим образом:
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
и вывести на экран.

var A: array[1..5,1..5] of Byte;

for i := 1 to 5 do

for j := 1 to 5 do

A[i,j] := 1 + (i + j — 2) mod 5;

for i := 1 to 5 do

for j := 1 to 5 do

Задача
Дана матрица A размерностью 5 x 5.
Заполнить ее следующим образом:
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
и вывести на экран.

var A: array[1..5,1..5] of Byte;

for i := 1 to 5 do

for j := 1 to 5 do

for i := 1 to 5 do

for j := 1 to 5 do

Задача
Дана матрица A размерностью 5 x 5.
Заполнить ее следующим образом:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
и вывести на экран.

var A: array[1..5,1..5] of Byte;

for i := 1 to 5 do

for j := 1 to 5 do

if Odd (i) then A[i,j] := j + (i — 1) * 5

else A[i,j] := 6 — j + (i — 1) * 5;

for i := 1 to 5 do

for j := 1 to 5 do

Задача
Дана матрица A размерностью 5 x 3, состоящая из целых чисел.
Найти номер строки, в которой сумма элементов максимальна.
Пример
A:
1 2 3
0 0 0
5 5 5
2 8 6
2 4 3
Результат: 4
Вариант решения

var A: array[1..5,1..3] of Integer;

i, j, Sum, Max, Imax: Integer;

for i := 1 to 5 do

for j := 1 to 3 do

for i := 1 to 4 do

for j := 1 to 3 do

if (Sum > Max) or (i = 1) then

Устанавливая рекомендуемое программное обеспечение вы соглашаетесь
с лицензионным соглашением Яндекс.Браузера и настольного ПО Яндекса .

Задача: Написать программу которая по введеному номеру времени года(1-зима,2-весна,3-лето,4-осень)выдавала соответствующие этому времени года, месяцы количество дней в каждом из месяцев.

uses crt;

var w:char;

begin

writeln(‘Выберите время года:’);writeln(‘1-зима’);

readln(w);case w of

‘1’:begin

writeln(‘ декабрь — 31 день’);

writeln(‘ январь — 31 день’);

writeln(‘ февраль — 28(29) дней’);

end;

‘2’:begin

writeln(‘ март — 31 день’);

writeln(‘ апрель — 30 дней’);

writeln(‘ май — 31 день’);

end;

‘3’:begin

writeln(‘ июнь — 30 дней’);

writeln(‘ июль — 31 день’);

writeln(‘ август — 31 день’);

end;

‘4’:beginwriteln(‘Осенние месяцы:’);

writeln(‘ сентябрь — 30 дней’);

writeln(‘ октябрь — 31 день’);

writeln(‘ ноябрь — 30 дней’);

end;else write(‘Такого времени года нет!’);

end;

end.

  • Бондаренко Анна ИвановнаНаписать 2593 16.04.2018

Номер материала: ДБ-1459208

Устанавливая рекомендуемое программное обеспечение вы соглашаетесь
с лицензионным соглашением Яндекс.Браузера и настольного ПО Яндекса .

    16.04.2018 103
    16.04.2018 167
    16.04.2018 210
    16.04.2018 252
    16.04.2018 100
    16.04.2018 190
    16.04.2018 323
    16.04.2018 440

Не нашли то что искали?

Вам будут интересны эти курсы:

Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение редакции может не совпадать с точкой зрения авторов.

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

Ссылка на основную публикацию
Adblock
detector