Помощь - Поиск - Пользователи - Календарь
Полная версия: String.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Santrex
Народ.Помогите прогрмисту 1 курса.Вот проги не получаються sad.gif а сдать их надо уже через 2 дня.Помогите чем можете и чем скорей тем лучше.Заранее спасибо.
А вот и условие прог: :p2:
1)Задана строка символов.Напечать повторяющийся символ.

2)Задан текс.Выполнить Сортировку по алфавиту слов,имеющих четное количесто букв.

3)Задан текст.Удалить одинаковые слова.
:p2: В этих прогах нам запрещенно использовать Функции,Процедуры и Фаелы.
Я надеюсь вы сможете помочь мне написать хотяб пару прог.
Digitalator
Цитата
В этих прогах нам запрещенно использовать Функции,Процедуры и Фаелы.


Эхх, что за програмистов растят в теперяшних вузах.......

А вообще надо бы написать что за текст (№2, №3), что в нем может быть и чего не может быть, из чего могут состоять слова и т.д. и т.п. - условие явно недостаточное

а первое примерно так:
Код

var s:string;
     i:byte;
     m:array[byte] of byte;
     max:integer;
     c:char;
begin
readln(s);
for i:=1 to length(s) do inc(m[ord(s[i])]);
for i:=1 to 255 do if m[i]>max then
 begin
 max:=m[i];
 c:=chr(i);
 end;
if max>0 then writeln (c,' ',max) else writeln('Empty string');
end.


Не проверял, не компилировал, может содержать ошибки
volvo
Santrex
Прекращаем дублировать темы: Чья это тема?
Santrex
В этих прогах нельзя:пользоваться фаелами,функциями процедурами.Желательно использовать такие легкие вещи как
if then else,
for to do,
while do,
array в виде массива,
ord,odd и т.п.
Желательно не использовать меток.
в обозначениях можно пользовать константами,
использовать для обозначения переменных виды : integer,char,real,boolean.
Digitalator
А к чему такие жесткие ограничения? Это препод такой или сам придумал? если сам то почему? если препод, то че это за препод? smile.gif

И уточни условие 2-й и 3-й задачи.
Santrex
Такие жоские условия поставил нам препод.Он сказал что высе остольное по паскалю мы будем изучать во 2 семестре.Университет МИИТ институт ИУИТ и кафедра УВМ бывшая ЭВМ.



По 2 заданию:там надо ввести вручную какой нибудь текст, определить слова имеющие четное количество букв и эти слова с четным количеством букв надо выстроить по алфавиту типа от А до Я или от A до Z смотря на каком языке текст.
По 3 заданию:там надо ввести вручную какой нибудь текст и удалить одинаковые слова после чего переписать это предложение без удаленных слов.
Altair
Цитата
И уточни условие 2-й и 3-й задачи.

текст задан в виде строки smile.gif
Ты это хотел от него услышать? smile.gif

Цитата
Это препод такой или сам придумал

Странно, если они знают про это, значитпроходили, а раз нельзя использовать .... хм.. видимоон сам придумал что бы потом смогразобратся в программе...
Digitalator
Цитата
текст задан в виде строки

Обойдемся без иронии - условие недостаточное.
Из каких символов может состоять слово?(латинские? кирилица? заглавные? прописные?)
Чем разделены слова? (пробелы? запятые? еще что? или все сразу? всегда один разделяющий символ? или сколько угодно? или более сложное правило?)
Что является концом стоки? (в некоторых подобных задачах единозначно указывается концом символ точки).
Santrex
Так: Слова могут состоять как из за главных букв так и из маленьких.
Между словами пробел.В конце точка.
Altair
Digitalator, мне кажется, что из каких символов может состоять слово без разницы, важно лишь символ разделитель, а конец строки - я думаю что я прав - используется просто строка турбо паса- string... сам посуди, если задание такого уровня, врядли что-то тут особенное...
Santrex
Все правильно.Ты верно думаешь.
Digitalator
Цитата(Oleg_Z @ 18.12.04 4:52)
Digitalator, мне кажется, что из каких символов  может состоять слово без разницы, важно лишь символ разделитель, а конец строки - я думаю что я прав - используется просто строка турбо паса- string... сам посуди, если задание такого уровня, врядли что-то тут особенное...

Задачи бывают разые, вот у нас на первом курсе как-то была подобная задача, так там нужно было еще и отслеживать правильность Расстановки заглавных букв в предложениях.... Мало ли чего там в условии написано - я давно заметил, что очень часто, когда пересказывают условие разные "непрограммисты", так сказать, они опускают "ненужные" на их взгляд детали условия, хотя в этих "ненужностях" и заключен смысл задачи. Потому я уже помешался на абсолютной точности условия smile.gif
Santrex
Народ пока мы будем тут спорить проги испоряться.Мне в понедельник здавать а програмный код хоть мало мальский я не вижу.Выж програмисты высшего класса не то что я.Когда ж вы поможете мне с написание этих прог? unsure.gif
Digitalator
Мало-мальский код увидишь во втором посту.
А вообще-то несколько подобных задач обсуждалось здесь на форуме, поищи хорошенько - Поиск не для красоты сделан
Santrex
Тоесть я надеюсь вы сможете написать код в эти выходные или хотяб пару загатовак или вырезак из других прог.Хотя хотелось бы всю прогу.Вы ж можете написать ее за 15 мин.Если захотите. :no:
Digitalator
Я могу написать обе проги за 3 мин и отладить еще за 5 (итого 8 мин максимум). Но мне лень......:orangun: я вообще ленивый....

А вообще за выходные ты и сам можешь написать эти проги. Возьми хорошую книжку, да посиди почитай. Да чуть не забыл тебе напомнить - мы ничем тебе не обязаны, и если кто-то все-таки напишет тебе проги, то только по своей доброй воле... не забудь сказать потом спасибо :molitva:
Santrex
Спасибо я скажу полюбому.Но ты говоришь возьми хорошую книгу и почитайю.Я читал ее весь семестр.У меня не получаеться сделать только эти проги.Я по мимо это и делаю другие.Ты не думай что я такой ленивый или тупой я просто не могу с ними справиться.Щас конец семестра и куча проблем ты сам знаешь.Ну а ты щас сидишь дома и смотришь какой нибудь интересный фильм (я надеюся).Ты мог бы оторваться на мин 15 и посмотреть мои проги и тогда я скажу тебе спасибо хоть 10 раз.
Digitalator
Не, я фильм несмотрю.... всякая лажа по телеку идет.

Хорошо, а что конкретно не получается?
Видишь ли еще у меня 20сокурсников (и 2 сокурсницы smile.gif - им грех не помочь)и ни один тоже ничего сам сделать не может.... приходиться пары прогуливать чтоб от них голова не болела smile.gif....

Вообщем если скажешь что конкретно не знаешь как сджелать, то ладно уж помогу, видишь ли, как я уже сказал - я ленивый, и паскаль устанавливать мне не хочется :no:
Santrex
Ладно.Тоды :
1)Как выделить повторяющиеся символы из множества других символов и записать их в массив.(причем символы могут быть любые, так например как знак = и простая буква.)
2)В задачи по сортировки массива по алфавиту я написал что там надо выполнить сортировку только слов имеющих четное колличиство букв.Это как сделать поделить типа каждое слово на 2 (if Slovo mod 2 <> 0 then) типо так?И как потом мне все эти слова четные собрать воедино и выстроить по алфавиту?
3)В задачи на удаление надо удалить одинаковые слова.Но как опредлеить какие слова равны друг другу и как произвести их удаление.
Вот пажулый пока все :yes: .
Токо реализуй это в программном коде, а не просто на словах.
Digitalator
1. Я же написал решение сразу же (смотри второе по счету сообщение)..... что-то не работает?

2. Для начала тебе нужно разбить текст на слова - для этого уточни какой между словами может быть разделитель - я предполагаю что только пробел, правильно?

3. Опять же надо разбить на слова, тот же вопрос.


допустим мы разбили на слова текст и у нас есть массив
var words:arrra[1..128] of string
каждый э-т которого - одно слово из текста и число
var count:byte
определяющее к-во слов в массиве
теперь по задачам:
2. Как я понял, нужен массив отсортированых слов с четным числом букв. Для этого нам нужно из нашего массива words выбрать все слова с четным числом букв. В паскале есть функция length() определяющая число символов в строке потому мы можем делать так:
Код

ch_count:=0;
for i:=1 to count do if length(words[i]) mod 2 = 0 then
  begin
  ch_count:=bcount+1;
  ch_words[chcount]:=words[i];
  end;

здесь в ch_count будет к-во нужных слов, а в ch_words (тоже массив) будут сами слова.
После этого к массиву ch_woords нужно применить любой алгоритм сортировки и показывать преподу.....
Santrex
Да между словаи пробел.
Digitalator
3. здесь нужно сравнивать каждое слово с каждым и помечать одинаковые...
примерно так
Код

for i:=1 to count-1 do
 for j:=i+1 to count do
   if words[i] = words[j] then
       begin
       equal_words[i]:=1;
       equal_words[j]:=1;
       end;

После этого в массиве equal_words будут стоять единички в ячейках соответствующим одинаковым словам в массиве words.
Далее надо собрать остальные слова в новый массив
Код

for i:=1 to count do
 if equal_words[i]<>1 then
    begin
    new_count:=new_count+1;
    new_words[new_count]:=words[i];
    end;

вот.... вопросья?
Digitalator
Если между словами всегда один пробел, то разбтвать текст надо примерно так:
Код

count:=1;
for i:=1 to length(s) do // s - текст
  if s[i] = ' ' then
     count:=count+1
    else
      words[count]:=words[count]+s[i];
Santrex
Я пробывал делать как ты сказал но у меня не получаеться.Я уже много раз по разному пробывал делать их.И книги листал.Но что то я упускаю или что.Может всетаки ты напишешь эти проги. mellow.gif
volvo
Santrex
А можно посмотреть, КАК ты их делал? Раз пытался, значит есть исходники... Может, у тебя ошибка в малом, так мы бы исправили... Чего еще раз писать :p2:
Santrex
Это я делал раньше прогу на сортировку.
Раншь вроде сортировала.Но токо все слова, а не с четным колличесвтом букв.
Я потом пробывал переделать и запарол ее.Тперь она вроде не сортирует совсем.Посмотрите что там можно сделать.И можно ли переделать структуру
Program Zadanie2;
USES CRT;
VAR
A : ARRAY [1..10] OF string;
B : ARRAY [1..10] OF INTEGER;
I,N,k,l : INTEGER;
s : string;
BEGIN
CLRSCR;
WRITE ('N=');
READLN (N);
WRITELN ('Введите список слов после кадого Enter:');
FOR I:=1 TO N DO
READLN (A[I]);
WRITELN;
FOR I:=1 TO N DO
B[I]:=LENGTH(A[I]);
FOR I:=1 TO N DO
WRITELN ('В слове',A[ I ],' -',B[ I ],'количесвто символов');
k:=0;
for i:=1 to n do begin
k:=k+1;
end;
writeln;
writeln;
writeln ('ђҐ§г«мв в:');
writeln ('Слова с четным koli4estvom bykv = ',k);

if k mod 2 <> 0 then
while (l<=(n-1)) do begin
for n:=1 to (n-1) do begin
if (a[n] > a[n+1]) then begin
s:=a[n];
a[n]:=a[n+1];
a[n+1]:=s
end;
end;
writeln ('Отсортированный список:');

for l:=1 to n do
write (a[l],' ');
REPEAT UNTIL KEYPRESSED
end;
END.
volvo
Santrex
Теперь она сортирует по возрастанию все слова с четным количеством букв (между словами может быть более одного пробела)...
Код

var
 s, T: string;
 words: array[1 .. 50] of string;
 count, i, j: byte;
begin
 write('s = '); readln(s);
 count := 0;

 for i := 1 to length(s) do
   if s[i] = ' ' then
     begin
       if (length(words[count]) mod 2 = 0) and
          (length(words[count]) <> 0) then
         inc(count)
       else
         words[count] := ''
     end
   else
     words[count] := words[count] + s[i];

 For i := 1 To count Do
   For j := count DownTo i+1 Do
     If words[j - 1] > words[j] Then
       Begin
         T := words[j - 1]; words[j - 1] := words[j]; words[j] := T
       End;
 For i := 1 to count do
   write(words[i], ' ');
 writeln
end.
Santrex
Спасибо.Прога пашет отлично.Но ты можешь обыяснить что такое значение Bute.
volvo
Santrex
Не Bute, а Byte... Это маленькие числа (0 - 255)... При работе со строками лучше использовать Byte, т.к. длина строки все равно ограничена - 255 символов. Но можно смело заменить Byte на Integer - все по-прежнему будет работать...
Digitalator
volvo, как всегда дал челу прогу, но вот как она работает, я думаю, он так и не понял...
Santrex
Почему теперь понял.Но еще надо те 2 проги.
Digitalator
Если понял, то сам напишешь. Если не напишешь - значит не понял.
Santrex
Я сказал что я понял смысл этой проги.И вообще я что тут на допросе поняли или не понял.Я просто просил написать 3 проги на минимально понятном языке.И все!Вы я смотрю пишите проги всем не знадвая вопросы понял кто там чего или нет.Если вы хотите просто поговорить так скажите.
Digitalator
"Мы" - это кто?
Я никому проги ТУТ не пишу, смею заметить...

А что непонятного то? Все что нужно я тебе написал, есть какие-то вопросы?

Или можешь подождать пока volvo (или еще кто-нибудь) не принесет тебе все на блюдечке с голубой каемочкой.
Santrex
Ну тогда подожду.Что ж мне еще делать.
volvo
Santrex
По образу и подобию моей первой программы написана вторая (для удаления одинаковых слов):
Код

var
 s, T: string;
 words: array[1 .. 50] of string;
 count, i, j: integer;
 was: boolean;
begin
 write('s = '); readln(s);
 count := 1;

 for i := 1 to length(s) do
   if (s[i] = ' ') or (s[i] = '.') then
     begin
       was := false;
       if length(words[count]) <> 0 then
         for j := 1 to count - 1 do
           was := was or (words[j] = words[count]);

       if (not was) and (length(words[count]) <> 0) then
         inc(count)
       else
         words[count] := ''
     end
   else
     words[count] := words[count] + s[i];

 For i := 1 to count do
   write(words[i], ' ');
 writeln
end.
Santrex
Большое спасибо тебе Volvo.Очень признателен за содействие.
Сталкер
Для чего нужно T: string в последнем коде?
samec
Цитата(Сталкер @ 10.05.2007 1:14) *

Для чего нужно T: string в последнем коде?

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