русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Решения задач


Дата добавления: 2014-11-28; просмотров: 831; Нарушение авторских прав


Задача 3.1

Проще всего в этой задаче определить длину строки n, организовать цикл по номеру символа в строке и сравнивать попарно первый символ с последним, второй - с предпоследним и т.д. Если хотя бы одна пара различна, то строка не симметричная. Так как просматривается сразу пара символов, то в цикле будет m = n div 2 повторений. Для запоминания результата просмотра введем переменную k (k будет равна 0, если строка симметрична и 1 иначе).
Программа, решающая эту задачу, будет иметь вид:

var s:string;i,k,n,m:integer;begin readln(s); n:=length(s); k:=0; m:=n div 2; for i:=1 to m do if s[i]<>s[n-i+1] then k:=1; if k=0 then writeln('Строка симметрична') else writeln('Строка несимметрична');end.

Задача 3.2

Если удалить из заданной строки все пробелы, то задача сведется к предыдущей.

Задача 3.3

Так как все цифры от 0 до 9 располагаются в таблице кодировки компьютера подряд, то проще всего проверить, является ли символ s[i] цифрой, можно с помощью неравенства '0'<=s[i]<='9' (на Паскале (s[i]>='0')and(s[i]<='9')). Для преобразования строки в число в Паскале используется процедура val(s,v,k), где s - строка (или символ), v - переменная числового типа, куда будет занесён результат преобразования, k - переменная целочисленного типа, которая принимает значение 0, если преобразование строки в число прошло успешно.

Задача 3.4

Пусть s - строка. Обозначим длину строки - l. Организуем цикл, в котором будем проверять, является ли очередной символ цифрой, если да, то организуем новый цикл, в котором будем формировать строку sn, состоящую из цифр (очередное целое число). Потом преобразуем sn в число и вычислим произведение. Программа на Паскале, реализующая данный алгоритм, будет иметь следующий вид (переменная p в этой программе используется для накапливания значения произведения, переменная kod - для хранения кода результата преобразования строки в число):



var sn,s:string; l,k,kod:integer; v,p:real;begin writeln('Введите строку'); readln(s); l:=length(s); p:=1; k:=1; repeat sn:=''; while (s[k]>='0')and(s[k]<='9')and(k<=l) do begin sn:=sn+s[k]; k:=k+1; end; if sn<>'' then begin val(sn,v,kod); p:=p*v; end; k:=k+1; until k>l; writeln(' p=',p);end.

Задача 3.8

Обозначим s - исходную строку, l - длину этой строки. Для решения создадим ещё одну строку s1(вначале пустую). Далее организуем цикл по номеру символа в строке s. Если очередной символ не #, то добавим его к строке s1, если это знак # и строка s1 не пустая, то удалим из неё последний символ.
Программа, реализующая данный алгоритм, будет иметь следующий вид:

var s,s1:string; dl,i,k:integer;begin writeln('Введите строку'); readln(s); dl:=length(s); s1:=''; k:=0; for i:=1 to dl do if (s[i]='#')and(k<>0) then begin delete(s1,k,1); k:=k-1; end else begin k:=k+1; s1:=s1+s[i]; end; writeln(s1);end.

Задача 3.10

Пусть s - заданная строка. Для решения данной задачи определим длину строки l и организуем цикл по номеру символа i. Символ строки является первым символом некоторого слова в том случае, когда он сам не является пробелом, и либо он - первый символ строки, либо слева от него стоит пробел. Если мы нашли первый символ некоторого слова, то запомним его номер и организуем цикл, в котором найдем номер последнего символа этого слова (символ будет последним в слове либо тогда, когда после него стоит пробел, либо когда он последний символ строки). Если последний символ слова совпадает с первым символом этого слова, и длина слова наибольшая из всех найденных, запомним эту длину и номер первого символа этого слова.
В приведенной программе введены следующие обозначения:
max - переменная, в которой запоминается текущая максимальная длина найденного слова; k - переменная, в которой поочередно запоминается номер первого символа каждого слова; koord - переменная, в которой хранится номер первого символа слова с максимальной длиной.

var s:string; koord,k,i,n,max:integer; fst:char;begin writeln('Введите строку'); readln(s); n:=length(s); max:=0; i:=1; while i<=n do if (s[i]<>' ')and((i=1)or(s[i-1]=' ')) then begin k:=i; while (i<n)and(s[i+1]<>' ') do i:=i+1; if (s[i]=s[k])and(i-k+1>max) then begin koord:=k; max:=i-k+1; i:=i+1; end; end else i:=i+1; if max<>0 then begin writeln(' max=',max); for i:=0 to max-1 do write(s[koord+i]); end else writeln('Такого слова нет') end.

Задача 3.11

Обозначим K - число левых скобок, M - число правых скобок, тогда, на каждом шаге подсчета скобок, должно выполняться условие: K>=M. После подсчета всех скобок должно выполниться условие K=M.

Задача 3.14

Имеется несколько путей решения этой задачи. Для упрощения предположим, что строка не начинается и не заканчивается пробелом и что между словами в строке стоит ровно по одному пробелу. Пусть известна пара слов, которую необходимо переставить, и - номера первой и последней букв в первом слове, и - номера первой и последней букв во втором слове. Рассмотрим способ, в котором для перестановки слов будем использовать следующий алгоритм:
Запишем буквы первого слова в обратном порядке (поменяв первую с последней, вторую с предпоследней и т.д.).
Например, из строки получим dcba efghi.
Потом аналогичным образом переставим буквы второго слова:
из строки получим dcba ihgfe.
Для получения окончательного результата необходимо записать буквы полученного словосочетания в обратном порядке:
Из строки получим efghi abcd (что и требовалось получить).
Таким образом, для перестановки двух слов достаточно написать подпрограмму, которая меняет в заданной строке порядок букв на противоположный (инвертирует строку), и вызвать эту подпрограмму для первого слова, второго слова и всего словосочетания.
Обозначим invert(k,l) - процедуру, которая записывает в заданной строке s символы с k-того по l-й в обратном порядке, тогда программа, решающая задачу, будет иметь вид:

var s:string; i,n,m1,m2,l1,l2:byte;procedure invert(k,l:byte);var i:byte; ch:char;begin for i:=k to ((l+k) div 2) do begin ch:=s[i]; s[i]:=s[l+k-i]; s[l+k-i]:=ch; end;end;beginwriteln('Введите строку'); readln(s);i:=0; n:=0;m1:=1;m2:=1;l1:=1;l2:=1;while i<length(s) dobegin i:=i+1; if (s[i]=' ')or(i=length(s)) then begin n:=n+1; if n=1 then begin m2:=i-1; l1:=i+1 end else begin n:=0; if i=length(s) then l2:=i else l2:=i-1; invert(m1,m2);invert(l1,l2);invert(m1,l2); m1:=i+1 end endend;writeln(s)end.


<== предыдущая лекция | следующая лекция ==>
Задачи с использованием строкового типа данных. | Задачи повышенной сложности


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.