Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 26
1

Поиск самого длинного и короткого слова

12.12.2011, 22:53. Показов 2472. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Из текстового файла, состоящего из 6-7 строк сформировать массив слов. Найти самое длинное слово и самое короткое слово и отметить их спереди символами ‘+++’ и ’---’ соответственно. Результат записать в файл. Вывести исходный и полученный файлы.
вот собственно говоря сама задача

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
Const nmax = 1000;
Type Tw = array[1..nmax] of string[255];
 
Const ZnakP : set of Char=
              ['.',',',':',';','?','!','=','-'];
 
Function DelZnakP(Var s : string) : word;
Var i : word;
Begin
  Result:=0;
  for i:=1 to length(s) do
    if s[i] in ZnakP then 
      begin inc(Result); s[i]:=' '; end;
End;
 
Function StrToWord(s : string; Var w : Tw) : word;
Begin
  Result:=0;
 
  if s='' then Exit;
  while pos('  ',s) <> 0 do 
        delete(s, pos('  ',s),1);
  if s=' ' then Exit;
  if s[1]=' ' then delete(s,1,1); 
  if s[length(s)]<>' ' then s:=s+' '; 
  writeln(s); 
while s<>'' do
  begin
    inc(Result);                         
    w[Result]:=copy(s, 1, pos(' ',s)-1); 
    delete(s,1,pos(' ',s));              
    writeln(w[Result]);  
  end;
End;
 
Var ft : Text;// это файл на внешнем носителе,
     w, ws, wr : Tw;  // а это массив строк - образ файла
    nz, i, j, nwr, nws : word;// –размерность массива строк
    s :string;
 
begin
  //Чтение из файла 
  AssignFile(ft,'Project2.dpr');
  Reset(ft);
  nz:=0;
  while not EoF(ft) do
  begin
    inc(nz); readln(ft, w[nz]); writeln(w[nz]);
  end;
  CloseFile(ft);
 
//Формирование словаря
  nwr:=0; // глобальный счетчик слов
  for i:=1 to nz do // цикл по строкам
  begin
    s:=w[i];
    DelZnakP(s);
    nws:=StrToWord(s, ws);// Слов в строке
    for j:=1 to nws do // цикл по словам в строке
    begin
      //writeln(ws[j]); // отладка если надо
      inc(nwr); wr[nwr]:=ws[j];
    end;
  end;
 
  Readln;
end.
Добавлено через 1 минуту
То что есть) то есть открывается файл мой из 6 - 7 строк, дальше чиститься от всех знаков препинания и преобразуется в словарь.. и надо найти самое длинное и короткое слово с добавлением значков из задания.. то есть написать еще одну процедуру.. Буду очень признателен за выполнение)

Добавлено через 1 минуту
Говоря простыми словами, выполнено первое предложение задания.. остальное не могу(

 Комментарий модератора 
Используйте специальные теги форматирования кода!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2011, 22:53
Ответы с готовыми решениями:

Найти длину самого короткого и самого длинного слова в строке
Помогите,нужен код( Дана строка,содержащая текст. Найти длину самого короткого слова и самого...

Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова
Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова Вот код:...

Поиск самого длинного слова
Словом считаем все что между пробелами. Работает не верно помогите найти ошибку пожалуйста.:cry: ...

процедуры поиска самого длинного слова в таблице
Подскажите как можно реализовать процедуру поиска самого длинного слова в таблице? ну есть таблица...

6
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
13.12.2011, 05:45 2
Твой код копать не стал - свой написал.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const
  sep_arr: String = '.,:;?!=- <>{}[]@#$%^&*'; // separators
 
var
  fl: TextFile;
  sep: set of Char; // множество разделительных символов
  s, buff: String;
  i, // счётчик для циклов
  min_index, min_length, // индекс и длина минимального по длине слова слова
  max_index, max_length: Integer; // то же для макс. по длине слова
  Words: Array of String; // динамический массив слов
 
begin
  // подготовим множество сепереторов (разделительных символов)
  sep := [];
  for i := 1 to Length(sep_arr) do
    sep := sep + [sep_arr[i]];
  // загружаем файл
  s := '';
  AssignFile(fl, 'input.txt');
  Reset(fl);
  While not EOF(fl) do
    begin
      ReadLn(fl, buff);
      s := s + buff + ',';
    end;
  CloseFile(fl);
  // разделяем файл на слова
  buff := '';
  SetLength(words, 0); // обнулили массив
  for i := 1 to Length(s) do
    If s[i] in sep then
      begin
        If buff = '' then
          continue;
        SetLength(words, High(words) + 2); // добавляем в конец 1 элемент
        words[High(words)] := buff; // добавляем в него слово
        buff := ''; // буфер стираем (для чтения слудующего слова)
      end
    else
      buff := buff + s[i];
  If High(words) = -1 then
    halt;
  // ищем требуемые слова
  max_index := 0;
  min_index := 0;
  min_length := Length(words[0]);
  max_length := min_length;
  for i := 1 to High(words) do
    begin
      If Length(words[i]) > max_length then
        begin
          max_length := Length(words[i]);
          max_index := i;
        end;
      If Length(words[i]) < min_length then
        begin
          min_length := Length(words[i]);
          min_index := i;
        end;
    end;
  // записываем слова в файл
  AssignFile(fl, 'output.txt');
  Rewrite(fl);
  WriteLn(fl, '+++', words[max_index]);
  WriteLn(fl, '---', words[min_index]);
  CloseFile(fl);
end.
Я правда не врубился, что в файл вывести надо. Там весь массив с двумя искомыми помеченными словами или только два искомых слова?
В общем, дальше, полагаю, сам разберёшься
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 26
13.12.2011, 23:40  [ТС] 3
От души спасибо, очень выручаете)

Добавлено через 13 минут
Ток прога почему-то не работает... черное окошко ток высвечивает(

Добавлено через 17 минут
файл свой добавил, сохранив в одной папке с прогой
0
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
14.12.2011, 03:11 4
Baustrel, да, файл свой надо в папке с прогой!
'input.txt' его назови
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 26
14.12.2011, 23:39  [ТС] 5
и я думаю надо вывести весь массив слов.. Словарь с означениями макс и мин слова.. я не знаю как это сделать

Добавлено через 12 часов 47 минут
то есть весь словарь с пометками а не ток 2 слова)
0
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
15.12.2011, 03:10 6
Baustrel, что значит словарь?
Все слова в столбик что ли (и два помеченные) ?
Если так, то последний блок исправь на это:
Delphi
1
2
3
4
5
6
7
8
9
10
11
  // записываем слова в файл
  AssignFile(fl, 'output.txt');
  Rewrite(fl);
  for i := 0 to High(words) do
    If i = max_index then
      WriteLn(fl, '+++', words[max_index])
    else if i = min_Index then
      WriteLn(fl, '---', words[min_index])
    else
      WriteLn(fl, words[i]);
  CloseFile(fl);
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 26
15.12.2011, 14:58  [ТС] 7
Спасибо огромное))
0
15.12.2011, 14:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2011, 14:58
Помогаю со студенческими работами здесь

Поиск самого длинного пути в графе
Есть граф заданный матрицей смежности размера n. В этом графе место стыка обозначается 1. Нужно...

В заданном предложении символы самого длинного слова заменить символами «*»
В заданном предложении символы самого длинного слова заменить символами «*». Напечатать исходный и...

Определить длину самого длинного и самого короткого слова
Помогите пожалуйста сделать програмку Дана символьная строка. Определить длину самого длинного и...

Найти длину самого короткого слова и самого длинного слова
Имеется текст в Memo-компоненте, загружаемый из файла. Данный текст необходимо преобразовать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru