Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ String.

Автор: Santrex 17.12.2004 23:30

Народ.Помогите прогрмисту 1 курса.Вот проги не получаються sad.gif а сдать их надо уже через 2 дня.Помогите чем можете и чем скорей тем лучше.Заранее спасибо.
А вот и условие прог: :p2:
1)Задана строка символов.Напечать повторяющийся символ.

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

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

Автор: Digitalator 17.12.2004 23:53

Цитата
В этих прогах нам запрещенно использовать Функции,Процедуры и Фаелы.


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

А вообще надо бы написать что за текст (№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 17.12.2004 23:58

Santrex
Прекращаем дублировать темы: http://forum.pascal.net.ru/index.php?showtopic=3466&hl=%E7%E0%EF%F0%E5%F9%E5%ED%ED%EE+%E8%F1%EF%EE%EB%FC%E7%EE%E2%E0%F2%FC+%D4%F3%ED%EA%F6%E8%E8

Автор: Santrex 18.12.2004 0:13

В этих прогах нельзя:пользоваться фаелами,функциями процедурами.Желательно использовать такие легкие вещи как
if then else,
for to do,
while do,
array в виде массива,
ord,odd и т.п.
Желательно не использовать меток.
в обозначениях можно пользовать константами,
использовать для обозначения переменных виды : integer,char,real,boolean.

Автор: Digitalator 18.12.2004 0:18

А к чему такие жесткие ограничения? Это препод такой или сам придумал? если сам то почему? если препод, то че это за препод? smile.gif

И уточни условие 2-й и 3-й задачи.

Автор: Santrex 18.12.2004 0:31

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



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

Автор: Altair 18.12.2004 0:34

Цитата
И уточни условие 2-й и 3-й задачи.

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

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

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

Автор: Digitalator 18.12.2004 0:46

Цитата
текст задан в виде строки

Обойдемся без иронии - условие недостаточное.
Из каких символов может состоять слово?(латинские? кирилица? заглавные? прописные?)
Чем разделены слова? (пробелы? запятые? еще что? или все сразу? всегда один разделяющий символ? или сколько угодно? или более сложное правило?)
Что является концом стоки? (в некоторых подобных задачах единозначно указывается концом символ точки).

Автор: Santrex 18.12.2004 0:50

Так: Слова могут состоять как из за главных букв так и из маленьких.
Между словами пробел.В конце точка.

Автор: Altair 18.12.2004 0:52

Digitalator, мне кажется, что из каких символов может состоять слово без разницы, важно лишь символ разделитель, а конец строки - я думаю что я прав - используется просто строка турбо паса- string... сам посуди, если задание такого уровня, врядли что-то тут особенное...

Автор: Santrex 18.12.2004 0:55

Все правильно.Ты верно думаешь.

Автор: Digitalator 18.12.2004 2:26

Цитата(Oleg_Z @ 18.12.04 4:52)
Digitalator, мне кажется, что из каких символов  может состоять слово без разницы, важно лишь символ разделитель, а конец строки - я думаю что я прав - используется просто строка турбо паса- string... сам посуди, если задание такого уровня, врядли что-то тут особенное...

Задачи бывают разые, вот у нас на первом курсе как-то была подобная задача, так там нужно было еще и отслеживать правильность Расстановки заглавных букв в предложениях.... Мало ли чего там в условии написано - я давно заметил, что очень часто, когда пересказывают условие разные "непрограммисты", так сказать, они опускают "ненужные" на их взгляд детали условия, хотя в этих "ненужностях" и заключен смысл задачи. Потому я уже помешался на абсолютной точности условия smile.gif

Автор: Santrex 18.12.2004 3:23

Народ пока мы будем тут спорить проги испоряться.Мне в понедельник здавать а програмный код хоть мало мальский я не вижу.Выж програмисты высшего класса не то что я.Когда ж вы поможете мне с написание этих прог? unsure.gif

Автор: Digitalator 18.12.2004 3:29

Мало-мальский код увидишь во втором посту.
А вообще-то несколько подобных задач обсуждалось здесь на форуме, поищи хорошенько - Поиск не для красоты сделан

Автор: Santrex 18.12.2004 3:36

Тоесть я надеюсь вы сможете написать код в эти выходные или хотяб пару загатовак или вырезак из других прог.Хотя хотелось бы всю прогу.Вы ж можете написать ее за 15 мин.Если захотите. :no:

Автор: Digitalator 18.12.2004 3:40

Я могу написать обе проги за 3 мин и отладить еще за 5 (итого 8 мин максимум). Но мне лень......:orangun: я вообще ленивый....

А вообще за выходные ты и сам можешь написать эти проги. Возьми хорошую книжку, да посиди почитай. Да чуть не забыл тебе напомнить - мы ничем тебе не обязаны, и если кто-то все-таки напишет тебе проги, то только по своей доброй воле... не забудь сказать потом спасибо :molitva:

Автор: Santrex 18.12.2004 3:49

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

Автор: Digitalator 18.12.2004 3:55

Не, я фильм несмотрю.... всякая лажа по телеку идет.

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

Вообщем если скажешь что конкретно не знаешь как сджелать, то ладно уж помогу, видишь ли, как я уже сказал - я ленивый, и паскаль устанавливать мне не хочется :no:

Автор: Santrex 18.12.2004 4:14

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

Автор: Digitalator 18.12.2004 4:28

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 18.12.2004 4:33

Да между словаи пробел.

Автор: Digitalator 18.12.2004 4:38

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 18.12.2004 4:46

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

Код

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 18.12.2004 17:29

Я пробывал делать как ты сказал но у меня не получаеться.Я уже много раз по разному пробывал делать их.И книги листал.Но что то я упускаю или что.Может всетаки ты напишешь эти проги. mellow.gif

Автор: volvo 18.12.2004 18:53

Santrex
А можно посмотреть, КАК ты их делал? Раз пытался, значит есть исходники... Может, у тебя ошибка в малом, так мы бы исправили... Чего еще раз писать :p2:

Автор: Santrex 18.12.2004 19:25

Это я делал раньше прогу на сортировку.
Раншь вроде сортировала.Но токо все слова, а не с четным колличесвтом букв.
Я потом пробывал переделать и запарол ее.Тперь она вроде не сортирует совсем.Посмотрите что там можно сделать.И можно ли переделать структуру

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 18.12.2004 19:55

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 18.12.2004 20:40

Спасибо.Прога пашет отлично.Но ты можешь обыяснить что такое значение Bute.

Автор: volvo 18.12.2004 20:54

Santrex
Не Bute, а Byte... Это маленькие числа (0 - 255)... При работе со строками лучше использовать Byte, т.к. длина строки все равно ограничена - 255 символов. Но можно смело заменить Byte на Integer - все по-прежнему будет работать...

Автор: Digitalator 18.12.2004 21:20

volvo, как всегда дал челу прогу, но вот как она работает, я думаю, он так и не понял...

Автор: Santrex 18.12.2004 22:19

Почему теперь понял.Но еще надо те 2 проги.

Автор: Digitalator 18.12.2004 22:26

Если понял, то сам напишешь. Если не напишешь - значит не понял.

Автор: Santrex 18.12.2004 22:33

Я сказал что я понял смысл этой проги.И вообще я что тут на допросе поняли или не понял.Я просто просил написать 3 проги на минимально понятном языке.И все!Вы я смотрю пишите проги всем не знадвая вопросы понял кто там чего или нет.Если вы хотите просто поговорить так скажите.

Автор: Digitalator 18.12.2004 22:38

"Мы" - это кто?
Я никому проги ТУТ не пишу, смею заметить...

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

Или можешь подождать пока volvo (или еще кто-нибудь) не принесет тебе все на блюдечке с голубой каемочкой.

Автор: Santrex 18.12.2004 22:41

Ну тогда подожду.Что ж мне еще делать.

Автор: volvo 19.12.2004 16:40

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 20.12.2004 1:16

Большое спасибо тебе Volvo.Очень признателен за содействие.

Автор: Сталкер 10.05.2007 1:14

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

Автор: samec 10.05.2007 9:38

Цитата(Сталкер @ 10.05.2007 1:14) *

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

ни для чего. Можешь спокойно убрать эту переменную.