Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2009, 15:37   #1
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию Вывод слов на определенную букву

Есть сортировка по алфавиту, нужно чтобы выводились слова на опеределенную букву

Код:
 function List.sort:list;
  var p:pe;flag:boolean;t:string;
  begin repeat flag:=true;
  p:=head;
  while assigned(p^.next) do begin
  if lowercase(p^.w)>lowercase(p^.next^.w) then
  begin t:=p^.w;p^.w:=p^.next^.w;p^.next^.w:=t;
  flag:=false;
   end;
   p:=p^.next end;
   until flag;
   result:=self end;
Код:
 function List.first(c:char):list;
  var tmp:list;
  begin   result:=tmp end;
REztor вне форума Ответить с цитированием
Старый 22.03.2009, 08:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а в чём проблема?! Вы не сами писали код сортировки? пишите свою процедуру. передаёте в неё нужную буковку:
Код:
procedure List.First(c:char);
var p:pe;
begin
  p:=head;
  while assigned(p^.next) do begin
    if Length(p^.w)>1 then 
      if Copy(p^.w,1,1)=c then
         WriteLn(p^.w); {если программка не консольная,
  то пишите тут свой вывод найденного слова,
  например так Memo1.Lines.Add(p^.w) }
    p:=p^.next; 
  end;
end;
Цитата:
t:=p^.w;p^.w:=p^.next^.w;p^.next^.w :=t;
кстати — это НЕКРАСИВО (а с точки зрения преподавателя, может быть, даже неверно!) Вы поступаете с элементами списка как с обычными переменными! Но ведь в данном случае есть СВЯЗЬ между элементами - достаточно изменить только связи, чтобы порядок элементов поменялся!!
Да и описания типа PE не приведено. Если в данном типе есть другие элементы (кроме w: string), то данный код будет работать ещё и НЕВЕРНО!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2009, 12:05   #3
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пишите свою процедуру.
Мне нужно именно функцию
REztor вне форума Ответить с цитированием
Старый 22.03.2009, 13:38   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Мне нужно именно функцию
которая вернёт список, так?
тогда у Вас всего два варианта - либо создать новый список и туда скопировать только нужные записи,
либо удалить "лишние" записи из исходного списка...
пишите функцию...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2009, 13:48   #5
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
которая вернёт список, так?
тогда у Вас всего два варианта - либо создать новый список и туда скопировать только нужные записи,
либо удалить "лишние" записи из исходного списка...
пишите функцию...
Код:
 function List.first(c:char):list;
  var tmp:list;p:pe;
  begin p:=head;
  while assigned(p^.next) do
begin
if p^.w[1]= s then showmessage(p^.w);
p:=p^.next;
end;
result:=tmp end;
end.
Какая-то ошибка в этой строчке
Код:
if p^.w[1]= s then showmessage(p^.w);
REztor вне форума Ответить с цитированием
Старый 22.03.2009, 15:22   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
= s
а если не секрет, откуда взялась переменная s
Вы хотели написать c

p.s.
Цитата:
Код:
function List.first(c:char):list;
...
result:=tmp
Это глупость... Зачем делать функцию которая возращает мусор?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2009, 16:40   #7
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если не секрет, откуда взялась переменная s
Вы хотели написать c

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s.
Это глупость... Зачем делать функцию которая возращает мусор?!
Ну вот такое у меня задание
REztor вне форума Ответить с цитированием
Старый 22.03.2009, 17:13   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

у меня всё компилируется нормально!! (даже не поленился проверить на Turbo Delphi)

А что за ошибку пишет?!!!!! o_O
и чем Вы компилируете?

ну, прям не знаю... ну, как вариант, попробуйте замените (c:char) на (c:string[1])
или запакуйте исходники и выложите на форум...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2009, 18:08   #9
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию

Код:
unit Unit2;

interface uses sysutils,stdctrls;

type
     pe=^elem;
     elem=record w:string;next:pe end;

List=class
  head:pe;s:string;
  constructor create;
  procedure add(t:string);
  procedure makelist(m:TMemo);
  procedure showlist(m:TMemo);
  function sort:list;
  function first(c:char):list;
  end;

implementation

 constructor List.create;
  begin head:=nil;s:='' end;

 procedure List.add(t:string);
 var p,q:pe;
 begin p:=head;new(q);
  q^.w:=t;q^.next:=nil;
  if p=nil then head:=q else
  begin
  while assigned(p^.next) do p:=p^.Next;
  p^.next:=q end end;

  procedure List.makelist(m:TMemo);
  var i:integer;p:string;
  begin s:=m.Text;i:=1;
    head:=nil;
   s:=trim(s);
   while s[i]<>#0 do begin p:='';
     while (s[i] in ['A'..'Z','a'..'z'])and(s[i]<>#0) do
     begin p:=p+s[i];i:=i+1 end;
     add(p);
     while not (s[i] in ['A'..'Z','a'..'z'])and(s[i]<>#0) do
     i:=i+1;
     end;
     end;

  procedure List.showlist(m:TMemo);
  var p:pe;
  begin p:=head;m.Clear;
  while assigned(p) do begin
   m.Text:=m.text+p^.w+', ';
   p:=p^.next end end;


  function List.sort:list;
  var p:pe;flag:boolean;t:string;
  begin repeat flag:=true;
  p:=head;
  while assigned(p^.next) do begin
  if lowercase(p^.w)>lowercase(p^.next^.w) then
  begin t:=p^.w;p^.w:=p^.next^.w;p^.next^.w:=t;
  flag:=false;
   end;
   p:=p^.next end;
   until flag;
   result:=self end;

 function List.first(c:char):list;
  var tmp:list;p:pe;
  begin p:=head;
  while assigned(p^.next) do
begin
if p^.w[1]= s then showmessage(p^.w);
p:=p^.next;
end;
result:=tmp end;
end.

end.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls,unit2;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    ext1: TMenuItem;
    Pfuhepbnm1: TMenuItem;
    Save1: TMenuItem;
    Quit1: TMenuItem;
    Sort1: TMenuItem;
    MakeList1: TMenuItem;
    od: TOpenDialog;
    sd: TSaveDialog;
    ShowList1: TMenuItem;
    SelectWordsonFirstLetter1: TMenuItem;
    procedure Quit1Click(Sender: TObject);
    procedure Pfuhepbnm1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure MakeList1Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ShowList1Click(Sender: TObject);
    procedure Sort1Click(Sender: TObject);
    procedure SelectWordsonFirstLetter1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;myList:List;

implementation

{$R *.dfm}

procedure TForm1.Quit1Click(Sender: TObject);
begin
  halt
end;

procedure TForm1.Pfuhepbnm1Click(Sender: TObject);
begin
 if od.execute then
 memo1.lines.loadfromfile(od.filename)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 memo1.clear;
 myList:=List.create;
end;

procedure TForm1.MakeList1Click(Sender: TObject);
begin
 myList.makelist(memo1);
 myList.showlist(memo1);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if key=vk_escape then
 begin memo1.Clear;
 memo1.text:=myList.s end;
end;

procedure TForm1.ShowList1Click(Sender: TObject);
begin
 myList.showlist(memo1);
end;

procedure TForm1.Sort1Click(Sender: TObject);
begin
 myList.sort.showlist(memo1);
end;

procedure TForm1.SelectWordsonFirstLetter1Click(Sender: TObject);
var c:char;
begin
 c:=InputBox('Lab Work N 4','Введите букву','')[1];
end;

end.
REztor вне форума Ответить с цитированием
Старый 22.03.2009, 19:55   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да.. 1) неужели Вы настолько беспомощны, что не можете скопировать/переписать текст ошибки:
Цитата:
[Error] Unit2.pas(74): Undeclared identifier: 'showmessage'
нужно в unit2 добавить в uses ... dialogs:
Код:
unit Unit2;

interface 
 uses sysutils,stdctrls, dialogs;
2) просто на будущее - выложить код правильнее (да и проще) - это запаковать исходные файлы (в данном случае project1.dpr unit1.pas unit1.dfm unit2.pas, unit2.dfm) и приложить архив к сообщению (Расширенный режим - Управление вложениями - Загрузить файл)

3) для того что бы решить проблему с ShowMessage достаточно было на нём нажать F1 и посмотреть в каком оно модуле (Unit) описано!

4) а Вы понимаете, что делает данная команда? Вы уверены, что Вам нужно выдавать сообщение на каждый элемент списка, который начинается с нужной буквы??!
Я же просто проиллюстрировал свою мысль - показать, что мы нашли нужную строку - дальше с ней можно делать что угодно - добавить в memo или создать новый список и добавить туда или... (ну,короче, на что фантазии хватит/что требуется по ходу решения...)

5) Вы зря убрали предварительную проверку на длину текста в p^.w
if Length(p^.w)>1 then ....
если попадётся пустая строка - получите ошибку в p^.w[1]
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
Вывод слов jakson_sun Общие вопросы C/C++ 1 22.01.2009 17:12
В PASCAL .Составить список слов начинающихся на конкретную букву Waia Помощь студентам 1 07.11.2008 18:20