Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Удаление последнего слова в строке

Задача:

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

Описание переменных:

s – строка;

len – ее длина.

Алгоритм решения задачи:

  1. Посимвольно просматриваем строку, начиная с конца.

  2. Как только встретится пробел, удаляем все символы от текущей позиции до конца строки и прерываем выполнение цикла.

Программа на языке Паскаль:

var

s: string;

len,i: byte;

begin

write('String: ');

readln(s);

len := length(s);

for i:=len downto 1 do

if s[i]=' ' then begin

delete(s,i,len-i+1);

break;

end;

writeln(s);

readln

end.

Примечания:

Если не использовать инструкцию break, то цикл продолжит выполняться и постепенно удалит все слова из строки за исключением первого.

Выражение len-i+1 дает в результате длину удаляемой части. Например, если длина строки равна 10, просматривается 7-й символ, и он оказывается пробелом, то приведенное выше выражение вернет 4. Будет удалена подстрока из 4-х символов, начиная с 7-го.

Как избавиться от goto

Программа на языке Паскаль:

Как можно переписать эту программу, чтобы избавиться от метки.

label lab;

var month;

begin

lab:

write('Введите номер месяца: ');

readln(month);

if not (month in [1..12]) then

goto lab;

Используйте какой-нибудь цикл. Например, так:

var month: byte;

begin

repeat

write('Номер месяца : ');

readln(month);

until month in [1..12];

readln

end.

Однако с циклом While еще проще:

...

while not (month in [1..12]) do begin

write('Номер месяца : ');

readln(month);

end;

...

Вывод квадратов натуральных чисел

Задача:

Вывести все квадраты натуральных чисел, не превосходящие данного

числа N.

Пример: N=50 | 1 4 9 16 25 36 49

Алгоритм решения задачи:

  1. Ввести число N.

  2. Присвоить x единицу.

  3. Пока y < n

  1. Возвести x в квадрат и присвоить полученное значение переменной y.

  2. Если y < n, вывести значение y на экран.

  3. Увеличить значение x на единицу.

Программа на языке Паскаль:

var

x,y,N:integer;

begin

{1 вариант}

write('Enter N: ');

readln(N);

x:=1;

while y<N do begin

y:=x*x;

if y<n then

write(y,' ');

x:=x+1;

end;

writeln;

{2 вариант}

write('Enter N: ');

readln(N);

x:=1;

repeat

y:=x*x;

if y<n then

write(y,' ');

x:=x+1;

until y>N;

readln

end.

Условный оператор if используется в цикле для того, чтобы не выводить последнее значение y, которое уже превосходит N.

Можно ли как-нибудь решить задачу проще? Да, если избавиться от переменной у

var x,n: integer;

begin

write('n = ');

readln(n);

x := 1;

while sqr(x) < n do begin

write(sqr(x),' ');

x := x + 1

end;

readln

end.

Числа Фибоначчи

Задача:

Вывести на экран ряд чисел Фибоначчи, состоящий из n элементов.

Числа Фибоначчи – это элементы числовой последовательности

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …, в которой каждое последующее число равно сумме двух предыдущих.

Описание переменных:

n – количество элементов ряда;

a, b – значения двух последних элементов ряда;

c – буферная («запасная») переменная;

i – счетчик.

Алгоритм решения задачи:

1. Получить значение n.

2. Присвоить a и b значения 0 и 1 соответственно (это первые числа ряда Фибоначчи). Вывести их на экран.

3. Начиная с 3-го элемента по n,

a. выводить на экран сумму a и b,

b. сохранить значение переменной b в c,

c. записать в b сумму a и b,

d. присвоить a значение с.

Программа на языке Паскаль:

var

a,b,c,i,n: integer;

begin

write('n = ');

readln(n);

a := 0;

write(a,' ');

b := 1;

write(b,' ');

for i:=3 to n do begin

write(a+b,' ');

c := b;

b := a + b;

a := c

end;

readln

end.