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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 16:06   #1
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию Массив ссылок на строки

Задача:
Создать одномерный массив ссылок на строки. Разместить в динамической памя-ти строки. Из подпрограммы-процедуры вернуть указатель на строку, первая буква которой «A». Вывести на экран эту строку. Если такой строки нет, то вернуть из процедуры поиска NIL.
Решение
У меня в процедуру передается и возвращается массив указателей, хотя в задании сказано вернуть указатель на строку, типа один. Я это сделал, так как если будет найдено несколько строк, то в указатель запишется только последняя найденная строка. Так допустимо или надо как-то по-другому сделать?

Код:
program 55;
type
 at=array [1..100] of ^string;
var
 c:at;
 chk:boolean;
 n:integer;
 a:at;
 i:integer;
 s:string;
 s1:string[1];


Procedure Search (b:at; var c:at);
begin
 for i:=1 to n do
 begin
  s1:=b[i]^;
  if (s1='A') or (s1='А') then
   begin
    c[i]:=b[i];
   end
   else c[i]:=nil
 end;
end;

begin
 Write('Введите размер массива*: ');
 ReadLn(n);
 WriteLn('Введите строку: ');
 for i:=1 to n do
 begin
  new(a[i]);
  readln(s);
  a[i]^:=s;
 end;
 Writeln('Вывод массива строк: ');
 for i:=1 to n do
 writeln(a[i]^);

 writeln('Начало поиска строки первая буква которой "A"');
 Search(a,c);
 chk:=true;
 for i:=1 to n do
 begin
  if c[i]<> nil then
  begin
  writeln(c[i]^);
  chk:=false;
  end;
 end;
 if chk=true then writeln('Нет такой строки');
 readln;
end.
sw47 вне форума Ответить с цитированием
Старый 04.04.2011, 16:11   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
procedure Search(out p:pointer;stroki:at; Size:integer;);
var i:integer;
begin
   p:=nil;
   for i:= 1 to Size do
      if stroki[i]<>nil then
        if stroki[i]^[1]='A' then
         begin
            p:=stroki[i];
             exit;
          end;
end;
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 04.04.2011 в 16:15.
New man вне форума Ответить с цитированием
Старый 04.04.2011, 16:15   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
at=array [1..100] of ^string;
Извините что влезаю в тему, а в чем прикол такого "указательства"?
Может тады проще работать со списками?
Или задавать динмассив через GetMem.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из строки в массив San4o Помощь студентам 13 11.09.2009 14:30
строки массив Артэс Общие вопросы C/C++ 1 06.09.2009 20:31
Массив и строки New_One Общие вопросы C/C++ 8 14.08.2009 12:50
Массив ссылок на функции класса therom Общие вопросы C/C++ 0 30.09.2008 15:59