Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки и буквы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
симав
Кто-нибудь, помогите! Училка задала программы, а тему даже не объяснила! sad.gif Помогите сделать их.
1. Подсчитать, каких букв в тексте больше: "а" или "о". Текст взять любой.
2. Поменять местами первую и последнюю букву в заданном тексте. Текст любой.
3. Подсчитать кол-во предложений в тексте. Текст любой.
Заранее спасибо! :D
klem4
ДЕСЯТКИ аналогичных задач решены на форуме.. пользуйся поиском и посмотри FAQ.
http://forum.pascal.net.ru/index.php?showtopic=2361
симав
Я обыскала все! Нигде ничего похожего даже нет! sad.gif
volvo
Цитата(симав @ 3.04.05 17:22)
Я обыскала все! Нигде ничего похожего даже нет!

А что собственно неясно в заданиях? Для начала - читайте FAQ: Строки, и потом объясните, что конкретно в заданиях вызывает затруднения?

Как найти первый и последний символ текста? Подсчет количества букв? Это точно было в FAQ... Как определить где закончилось предложение? Тут Вам придется подумать...
klem4
1) Обнуляешь счетчики Na=0;No=0; просматриваешь текст, если очередная буква = а, то Na:=Na+1, если = О. то No=No + 1;
2) t=a[первое];
a[первое]=a[последнее];
a[последнее]=t;
3) Удаляещь лишние пробелы из текстаи, а потом считаешь, сколько у тебя в тексте знаков, оканчивающих предложение, например "." , "!" , "?" итд.
Altair
Цитата
Удаляещь лишние пробелы из текстаи

Зачем? просто считаем число символов, которое конец предложение означают.
klem4
Ну так, для красоты ;)
PS да, действителнь, что-то я погорячился ... lol.gif
Пробелы можно оставить в покое.
симав
:molitva: rolleyes.gif Спасибо огромное!!!!! :thanks:
симав
Вот написала, но не идет.
1)
Код
var
s,d,a,o:string;
Ko,Ka:integer;
begin
Ko:=0;
Ka:=0;
writeln('s');
readln(s);
if d=a then Ka:=Ka+1;
if d=o then Ko:=Ko+1;
writeln('Ka=',Ka);
writeln('Ko=',Ko);
readln;
end.

2)
Код
var
s,d,a:string;
begin
writeln('s');
readln(s);
d:=a(1-oe slovo);
a(1-oe slovo):=a(posled);
a(posled):=d;
writeln('s');
end.

blink.gif

Тегами пользуйтесь ...
volvo
Значит, так:
1. Не забудьте, что работаем - с символами
Код
var
s,d,a,o:string;
i, Ko,Ka:integer;
begin
Ko:=0; Ka:=0;
writeln('s');
readln(s);
for i := 1 to length(s) do begin
 if s[i]='a' then Ka:=Ka+1; { <--- 'a' не забываем апострофы}
 if s[i]='o' then Ko:=Ko+1; { <--- 'o' }
end;
writeln('Ka=',Ka);
writeln('Ko=',Ko);
readln;
end.


2.
Код
var
s:string; d: char;
begin
writeln('s');
readln(s);
d:=s[1]; s[1] := s[length(s)]; s[length(s)] :=d;
writeln('s = ', s);
end.
FreeMan
Молодец, ты всё сделала почти правильно.
замени
Цитата
if d=a then Ka:=Ka+1;
if d=o then Ko:=Ko+1;

на более приличное
Код
For i:=1 to s[0] do begin
if s[i]='a' then inc(Ka);
if s[i]='o' then inc(Ko);
end;

добавь переменную i:byte;

На предыдущий пост посмотри smile.gif
volvo
FreeMan, нехорошо... Это даже не скомпилится smile.gif
Цитата
For i:=1 to ord(s[0]) do begin...
klem4
Вот чтобы не задумываться лучше всегда так :
Код

for i:=1 to length(s) do begin ...
FreeMan
Цитата
Это даже не скомпилится

А я и не собираюсь!!!! :D
симав
3)
Код
var
st:string;
k:integer;
begin
writeln('st');
readln(st);
k:length('.');
writeln('k=',k);
end.


unsure.gif так?
volvo
3. (Почти правильно)... ;)
Код
var st:string;
k:integer;
begin
k := 0;
writeln('st'); readln(st);
for i := 1 to length(s) do
 if s[i] in ['.', '?', '!'] then inc(k)
writeln('k=',k);
end.
симав
У меня вопрос.
Что такое ink?
То есть всегда нужно писать цикл? blink.gif
klem4
Код
inc(i)<=>i:=i+1;


Удаляем из первого задания лишние переменные ;)

Код

uses crt;
var s:string;
   i,ka,ko:byte;

Begin
  clrscr;
  write('s=');readln(s);
  ka:=0;ko:=0;
  for i:=1 to length(s) do
   begin
      if s[i]='a' then inc(ka);
      if s[i]='o' then inc(ko);
   end;
  writeln('ka=',ka);
  writeln('ko=',ko);
  readln;
end.

симав
Что такое inc huh.gif ?
A bite-это integer?
А еще clrscr? blink.gif
klem4
про инк я сказал, byte - целый тип, как integer, но занимает меньше памяти, одна переменная - 1б, clrscr - очистка экрана.
симав
Извини, про inc не заметила. rolleyes.gif
симав
Большое спасибо, очень помогли! :D
симав
Код
var st:string;
i,k:integer;
begin
k := 0;
writeln('st');
readln(st);
for i := 1 to length(st) do
if st[i] in ['.', '?', '!'] then k:=k+1;
writeln('k=',k);
end.


Что здесь значит in?

симав, давайте все-таки пользоваться тегами...
klem4
in - операция вхождения в множество, в твоем случае проверяет, является ли элемент строки st[i] одним из следующих символов : '.', '!','?'
симав
А можно как-нибудь без in обойтись? Ну, заменить чем-нибудь? rolleyes.gif
klem4
конечно можно. например так :
Код

if (st[i]='!')or(st[i]='.')or(st[i]='?') then begin ....


ЗЫ когда думать начнем ? ;)
симав
Извиняюсь!!!!!!!!!!!!!!!! huh.gif Что-то я туплю!!! :D
Спасибки! :obm: :p9:
симав
Всем спасибо за помощь! Поставили 5! Дали еще три задачки, если сама не справлюсь, то обращусь.
:p1: :p4:
симав
И снова я! :D Три задачки:
1) Подсчитать количество слов в тексте, начинающихся на "k".
2) Составить программу перестановки левой и правой частей текста с четным количеством символов.
3) Преобразовать текст, удалив из него все "*", предшесвующих 1-ой точке, и заменить на "+" все "3", встречающихся после 1-ой точки.

Код

1)var s:string;
        i,n:integer;
begin
n:=0;
writeln('s='); readln(s);
for i:=1 to length(s) do
if s[i]='k' then n:=n+1;
writeln(s);
end.


здесь у меня почему-то считает все буквы "к".

Код

3)   var st:string;
i:integer;
begin
writeln('st');
readln(st);
i:=pos('.',s);
delete(s,pos('*',s),1);
for i := 1 to length(st) do
if st[i]='3' then s[i]:='+';
writeln(st);
end.

На "+" заменяет, а "*" не удаляет.
Что не так? blink.gif
Altair
3.

var
s:string;
i:byte;
begin
readln(s);
if pos('.',s)<>0 then
begin
while (pos('*',s)<>0) and (pos('*',s)<pos('.',s)) do delete(s,pos('*',s),1);
for i:=pos('.',s) to length(s) do if s[i]='3' then s[i]:='+'
end else writeln('Нет точки!');
writeln(s);
readln;
end.
klem4
2)

Код

var s:string;
   t:char;
   i:byte;
Begin
  readln(s);
  if odd(length(s)) then
    writeln( 'Строка не четная')
     else
      for i:=1 to length(s) div 2 do
       begin
           t:=s[i];
          s[i]:=s[length(s)-i+1];
          s[length(s)-i+1]:=t;
       end;
   writeln(s);
   readln;
end.

симав
А в 1-ой что ни так?
Altair
1.

var
s:string;
r:set of char; i,k:byte;
begin
r:=['.',' ',';'];
readln(s);
for i:=1 to length(s) do
begin
if i=1 then
begin
if s[1]='k' then inc(k);
end else
begin
if (s[i]='k') and (s[i-1] in r) then inc(k);
end
end;
writeln(k);
end.


r - множество разделителей. между словами.
симав
Что-то с 3-ей задачей намудрил... huh.gif
А зачем в 1-ой разделитель? huh.gif

А разделитель затем, что бы слова резделять!!!! Ты думаешь слова разделяются только пробелами??? А запятые, точки и прочие знаки препинания, это по твоему что????
Altair
симав, может т ыхочешь сказать, что она не работает???
А если нет, а ты не понимаешь,что та мнаписанно,то бери книгу по Паскалю, и читай!

Вопросы по АЛГОРИТМУ еще будут???
Здесь именно на такиевопросы отвечают, а не на вопросы "а что такое byte или что такое integer" ....
еще раз - берем книгу и читаем!!!
симав
Извините, меня! В 9-ом классе этого не проходят!!!! :firwat:
Я знаю, что такое integer!
симав
:mol: naezd.gif

Модератор: Это не наезд... Мы помогаем в решении задач, но не решаем их полностью за кого-то...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.