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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2011, 11:42   #1
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
Вопрос задача 'ссылки'

в ней требуется найти общее кол-во строк которые начинаются с одинакого символа.
например:
мама мыла раму
ама мыла раму
ара гага
мама мыла.
ответ:1.
вроде правильно но почемуто выкидывает(((
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type sp=^elem;
  elem=record
  st:string;
  l:sp; end;
  var m,first:sp; k,i:Integer;
  st2:string;
begin
 New(m);New(first);

  first:=m;
          k:=1;
 for i:=1 to 10 do begin

     Readln(m^.st);

     New(m^.l);
     m:=m^.l;
 end;
    m:=first;
    while m<>nil do begin

      st2:=m^.st;
       m:=m^.l;
      if st2[1]=m^.st[1] then  inc(k);
    end;
    Writeln(k);
    Readln;
end.
phasha вне форума Ответить с цитированием
Старый 03.10.2011, 12:41   #2
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

печально.компилятор ошибок не находит зато прекрасно выкидывает... кто подскажет что делать?я уже как тока не переделывал все равно ниче хорошего.этот код самый адекватный из всех...
phasha вне форума Ответить с цитированием
Старый 03.10.2011, 12:54   #3
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Код:
program id167412;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  var
    elem : array of string;
    S : string;
    i,n,j,c : integer;

begin

 i:=1;
 repeat
  writeln('Элемент ',i,' (пробел - конец ввода) ');
  Readln(S);
  S:=Trim(S);
  if S<>'' then
  begin
   SetLenGth(elem, length(elem)+1);
   elem[high(elem)]:=S;
   inc(i);
  end;
 until S='';

 n:=LenGth(elem);

 for i:=0 to n-1 do
  if elem[i,1]<>#0 then
  begin
   c:=1;
   for j:=i+1 to n-1 do
   if elem[j,1]= elem[i,1] then
   begin
    elem[j,1]:=#0;
    inc(c);
   end;
   writeln('На букву ',elem[i,1],' встречается ', c, ' слов');
   elem[i,1]:=#0;
  end;

  Finalize(elem);
  sleep(10000);
end.
попробуй так
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 03.10.2011 в 12:56.
JUDAS вне форума Ответить с цитированием
Старый 03.10.2011, 12:58   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
этот код самый адекватный из всех
насмешил не на шутку.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 03.10.2011, 12:59   #5
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

спасибо...но тут нужны ссилочные типы а не динамический массив)
phasha вне форума Ответить с цитированием
Старый 03.10.2011, 13:12   #6
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type sp=^elem;
  elem=record
  st:string;
  l:sp; end;
  var m,first:sp; k,i:Integer;
  st2:string;
begin
 New(m);New(first);

  first:=m;
          k:=1;
 for i:=1 to 10 do begin

     Readln(m^.st);

     New(m^.l);
     m:=m^.l;
 end;
    m:=first;
    while m<>nil do begin

      st2:=m^.st;
       m:=m^.l;
      if st2[1]=m^.st[1] then begin inc(k);
      writeln(k);readln;
    end;
    Writeln(k);
    Readln;
end.
можно и так конечно...результат выдает но надо очень быстро подглядывать:D.в общем это не выход))какие могут быть идеи?
phasha вне форума Ответить с цитированием
Старый 03.10.2011, 13:16   #7
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
ссилочные типы
так пользуйся GetMem, FreeMem и массивом символов вместо строк как в С++ и будет тебе счастье
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 03.10.2011, 13:26   #8
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

имеешь ввиду нужно будет записать строки в массив и освободить память а тока потом сравнивать первые символы строк тока в массиве?

Последний раз редактировалось phasha; 03.10.2011 в 13:33. Причина: сам не понял че сказал
phasha вне форума Ответить с цитированием
Старый 03.10.2011, 14:05   #9
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

я имею ввиду следущее:
Вариант 1
Строка которая вводится с клавиатуры, может и будет иметь разный размер в разнеых элементах. Для того чтобы хранить такую стукруту тебе нужно описать, как минимум следующие элементы:
Count - число символов
Dump - сам дамп символов
Каждая структура, должна создаваться в оперативной памяти используя GetMem или ReallocMem. Размер структуры для каждого последующего элемента, желательно сделать одинаковый, так легше будет читать потом.
В качестве дампа, советую использовать PChar указатель на первый элемент массива.
Вариант 2
Все строки сбивать в один сплошной дамп типа строки (string или массивом char) банальным суммирование строк (копированием). Ссылочный тип объявить следуюший
record
position: integer;
count: integer;
end;
размер твоего элемент = всегда 8, поэтому элементы в твоём дампе будет выглядеть вот так
Po, Pn : PItem;
Pn := PItem(integer(Po)+n*SizeOf(TItem));
соответственно строку которая должна анализироваться =
S:= Copy(Dump[0], Pn^.position, Pn^.Count);
----------
Выбор и решение за тобой.
П.С. странная у тебя задача. Байто...вом как правило в Паскале занимаются очень редко, это превилегия другого широкоизвесного языка программирования )))
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 03.10.2011, 14:15   #10
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

спасибо бумем стараться))я делал тем методом т.к. он мне больше понятен))
phasha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить имя файла из ссылки(в конце ссылки нет имени файла) Человек_Борща Работа с сетью в Delphi 11 05.06.2011 15:15
Названия, Сноски, Ссылки… обратная задача :-( OlegVE Microsoft Office Word 17 11.10.2010 18:56
Ссылки segail Microsoft Office Excel 6 13.10.2009 22:16
Ссылки!!! саманта Помощь студентам 18 27.09.2008 21:38