Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Задача 188.188. Знайти, яке з двох введених слів більше.




Розв’язання: Всі розглянуті раніше операції порівняння двох величин, які ми застосовували до числових змінних, можна застосовувати і до літерних величин. Тобто можна говорити, що одна величина дорівнює іншій, або величина А більша (менша) за величину В. Тут необхідно зробити відповідні роз’яснення.

По–перше, зрозуміло, що «мама» = «мама», але тільки у тому випадку, коли всі літери в обох словах написані одними й тими ж символами, тобто літерами одного і того ж алфавіту. Якщо ж ми у першому слові літери «а» напишемо літерами англійського алфавіту, а у другому – на перший погляд ті ж самі літери «а» напишемо у російському (українському) алфавіті, то ці слова вже не будуть однаковими. Це пов’язано з тим, що, як ми вже вказували, тип string описано як масив типу char, а останній тип є впорядкованим і однакові на вигляд літери різних алфавітів не є однаковими, оскільки їм відповідають різні порядкові номери відповідних символів.

По–друге, як бути у випадках, коли слова мають різну кількість літер («мама» – «мам»), або ж відрізняються одним символом («мама» – «Мама»)? У даному випадку (як і всіх інших) ПЕОМ діє наступним чином: порівнюються попарно відповідні літери двох слів і як тільки виявляється, що два чергові символи в слові відмінні, то більшим вважається те слово, у якого код даного символу більший.

Все вищесказане демонструє наступна програма:

program poriwn_stroki;

var st1, st2: string;

i,s: integer;

begin

write('Введiть переше слово: ');readln(st1);

write('Введiть друге слово: ');readln(st2);

s:= 0;

for i:= 1 to length(st1) do

begin

write(ord(st1[i]):3,' ');

s:= s + ord(st1[i]);

end;

writeln('s = ',s);

s:= 0;

for i:= 1 to length(st2) do

begin

write(ord(st2[i]):3,' ');

s:= s + ord(st2[i]);

end;

writeln('s = ',s);

if st1 = st2 then writeln('Слова однаковi')

else if st1 > st2 then writeln('Переше слово бiльше')

else writeln('Друге слово бiльше');

readln;

end.

 

 

Приклади розв’язування задач з використанням основних операцій для роботи з літерними величинами

 

Задача 189.189. Підрахувати, скільки разів в реченні зустрічається задана літера.

Розв’язання: Задача є досить простою і її розв’язок не становить труднощів. Єдине, що потрібно пам’ятати, так це те, що для комп’ютера є принципово важливим той факт, у якому алфавіті вводились всі літери. Тобто і у реченні і в зразку, розглядувана літера повинні вводитись в одному алфавіті. Крім того, великі і маленькі літери також є різними літерами. Ми будемо для простоти вважати, що всі літери вводяться в одному алфавіті (наприклад, українському) і маленькими літерами. Випадок використання різних алфавітів рекомендуємо розв’язати самостійно.

program kolbukw;

var St: string; { Для вводу речення }

obrazec: char; { Для вводу зразку літери }

i, kol: byte; { i – для циклу, kol – для кількості введеної літери }

begin

write('Введiть речення: '); readln(St);

write('Яку лiтеру пiдраховувати: ');readln(obrazec);

kol:= 0;

for i:= 1 to length(St) do

if St[i] = obrazec then inc(kol);

writeln('Шуканих лiтер в текстi -> ',kol);

readln

end.

Задача 190.190. Підрахувати кількість слів в реченні.

Розв’язання: Для підрахунку кількості слів у реченні нам потрібно згадати, як ми самі рахуємо слова і навчити цій справі ПЕОМ. Звичайними словами пояснити спосіб для комп’ютера можна так: Якщо під час перегляду всіх символів у реченні ви зустріли підряд два символи, перший з яких не є пропуском, а другий – є пропуском, то це кінець слова. Даний алгоритм врахує і той факт, коли ми будемо вводити між словами не один пропуск, а два і більше. Для універсальності і 100% точності про всяк випадок перед початком аналізу до кінця нашого речення «приклеїмо» пропуск.

Program kol_slow;

Var St: String;

i, k: Integer;

Begin

Write(‘Введіть текст: ’);Readln(St);

k:= 0; St:= St+ ‘ ’;

For i:=1 to length(St) – 1 do

if (St[i] <> ‘ ’) and (St[i+1] = ‘ ’) then inc(k);

writeln(‘У введеному тексті ’, k, ‘ слів.’); Readln

end.

Задача 191.191. У заданому діапазоні натуральних чисел підрахувати кількість таких чисел, у запису яких останні цифри квадратів чисел співпадають з самим числом (6 і 36, 25 і 125).

Розв’язання: Задачу можна розв’язати і без використання літерних величин, але саме такий спосіб, коли при розв’язанні числових задач використовуються операції з літерними величинами, досить часто спрощує процес розв’язку задачі. У цьому ви можете переконатись, коли спробуєте розв’язати деякі з приведених раніше задач. Алгоритм розв’язання даної задачі буде полягати у тому, що ми будемо перетворювати числа і їх квадрати у літерні величини і перевіряти, чи співпадають посимвольно ці величини, якщо рахувати з кінця. Як тільки знайдемо перше неспівпадання, переходимо до розгляду наступного числа з заданого інтервалу. З тим обмеженням, що квадрат розглядуваних чисел не перевищуватиме тип longint, програма, що реалізує описаний алгоритм, може бути такою:

program kolbukw;

uses crt;

var St1, St2: string;

a, b, i, k, k1,k2,kol: longint;

flag: boolean;

begin

write(‘Введiть початок iнтервалу: ’); readln(a);

write(‘Ведiть кiнець iнтервалу: ’);readln(b);

kol:= 0;

for i:= a to b do

begin

Str(i, st1);

k1:= i*i;

Str(k1, st2);

k:= length(st1);

k1:= k; { почнемо порiвнювати з кiнця }

flag:= true; { припускаємо, що розглядуване число нам пiдходить }

while k > 0 do { поки не порiвняли всi цифри }

begin

if St1[k] <> St2[length(St2) - (k1-k)] then

begin { якщо цифри не однаковi }

flag:= false; { то число не пiдходить }

k:= 0; { i тому виходимо з циклу }

end;

dec(k); { iнакше порiвнюємо наступнi цифри }

end;

if flag = true then begin

inc(kol);

writeln(st1, ‘ -> ’,st2);

end;

end;

writeln(‘Шуканих чисел у заданому iнтервалi = ’,kol);

readln

end.





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 481 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2429 - | 2175 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.