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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2010, 19:42   #1
Sp4~ShaRp
 
Регистрация: 25.07.2010
Сообщений: 6
Радость вопросик от нубика с массивами)

вообще надо написать функцию у которой на входе дается динамический массив цифры идут по возрастанию но не по порядку
так вот мне надо потом вывести все значения массива в строку но при это цифры которые идут не по парядку просто написать через запитую а те которые по порядку написать через черточку то есть 7-10 например.


в результате должно получиться что-то типо такого 4,5,8,11-22,26,33-45,55 и тд


помогите плиз буду очень признателен))

язык паскаль)

Последний раз редактировалось Sp4~ShaRp; 25.07.2010 в 19:47.
Sp4~ShaRp вне форума Ответить с цитированием
Старый 25.07.2010, 20:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А язык программирования кто будет указывать?!
Вот пример на Delphi:
Код:
function ArrayDigitToRange(A : array of integer) : string;
var i, k0, kol : integer;
      s : string;
begin
  s := '';
  k0 := A[Low(A)];
  kol := 1;
  s := IntToStr(k0);
  for i:=Low(A)+1 to High(A) do
    if A[i]<>k0+Kol then begin
       if Kol<>1 then s := s + '-' + IntToStr(k0+Kol-1);
       k0 := A[i];
       kol := 1;
       s := s + ',' + IntToStr(k0);
    end
    else inc(Kol);

  {проверка на то, что массив закончился последовательностью}
  if kol>1 then s := s + '-' + IntToStr(k0+Kol-1);

  ArrayDigitToRange := s
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.07.2010, 21:09   #3
Sp4~ShaRp
 
Регистрация: 25.07.2010
Сообщений: 6
По умолчанию

паскаль)


да извините забыл совсем если например всего 2 цифры по порядку идут то между ними тире не надо а просто запятую


помогите плиз)

Последний раз редактировалось Sp4~ShaRp; 25.07.2010 в 21:32.
Sp4~ShaRp вне форума Ответить с цитированием
Старый 25.07.2010, 21:47   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

могу помочь за вознаграждение полностью избавив вас от головной боли
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 25.07.2010, 21:51   #5
Sp4~ShaRp
 
Регистрация: 25.07.2010
Сообщений: 6
Радость

спасибо но денег нема)(

мне надо только что-нить придумать что бы между двумя цифрами по порядку не было "-"
Sp4~ShaRp вне форума Ответить с цитированием
Старый 25.07.2010, 22:16   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
мне надо только что-нить придумать что бы между двумя цифрами по порядку не было "-"
ну, это как раз элементарно:
Код:
  for i:=Low(A)+1 to High(A) do
    if A[i]<>k0+Kol then begin
       if Kol>1 then
          if Kol=2 then
              s := s + ',' + IntToStr(k0+Kol-1)
          else
              s := s + '-' + IntToStr(k0+Kol-1);
       k0 := A[i];
       kol := 1;
       s := s + ',' + IntToStr(k0);
    end
    else inc(Kol);
Вы лучше скажите, каким образом Вы собираетесь в Pascal реализовывать динамические массивы (которых в языке просто нет!) ?!
Через указатели + выделение памяти? Или как?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.07.2010, 22:38   #7
Sp4~ShaRp
 
Регистрация: 25.07.2010
Сообщений: 6
По умолчанию

тооооо я нууб я написал выше в dekphi конечно)

а вот еще вопросик моно?)
Sp4~ShaRp вне форума Ответить с цитированием
Старый 25.07.2010, 22:41   #8
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

лови код:
Код:
type TIntMassiv = array of Integer;
procedure TMyArray.TestProc;
var
   intMassiv: TIntMassiv;
   inn: Integer;
begin
   { Установим длину динамического массива }
   SetLength(intMassiv, 2);
   { Выводим значение первого элемента массива }
   intMassiv[0] := 10;
   { Выводим значение второго элемента массива }
   intMassiv[1] := 12;

   { Выводим длину и значения элементов массива intMassiv }
   Writeln('intMassiv length = 2');
   for inn := 0 to 1 do
   begin
      Writeln('intMassiv[' + IntToStr(inn) + '] = ' + IntToStr(intMassiv[inn]));
   end;

   { Установим новую длину динамического массива }
   SetLength(intMassiv, 3);
   { Выводим значение третьего элемента массива }
   intMassiv[2] := 14;

   Writeln();

   { Выводим длину и значения элементов массива intMassiv }
   Writeln('intMassiv length = 3');
   for inn := 0 to 2 do
   begin
      Writeln('intMassiv[' + IntToStr(inn) + '] = ' + IntToStr(intMassiv[inn]));
   end;

   Writeln();

   { Установим новую длину динамического массива }
   SetLength(intMassiv, 1);

   { Выводим длину и значения элементов массива intMassiv }
   Writeln('intMassiv length = 1');
   for inn := 0 to 0 do
   begin
      Writeln('intMassiv[' + IntToStr(inn) + '] = ' + IntToStr(intMassiv[inn]));
   end;

   { Освобождаем память, выделенную массиву }
   intMassiv := nil;

   ReadLn();
end;
kakawkin вне форума Ответить с цитированием
Старый 25.07.2010, 22:51   #9
Sp4~ShaRp
 
Регистрация: 25.07.2010
Сообщений: 6
По умолчанию

Serge_Bliznykov ваш код не работает если у нас массив заканчивается последовательностью он просто не выводит ее((

kakawkin спасибо большое но мой мозг взорвется понимать другое решение данной задачи)

Последний раз редактировалось Sp4~ShaRp; 25.07.2010 в 22:54.
Sp4~ShaRp вне форума Ответить с цитированием
Старый 26.07.2010, 00:05   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Как это - "не работает" ?!
Вы, наверное, забыли про довесочек после основного цикла!

пробуйте:
Код:
function ArrayDigitToRange(A : array of integer) : string;
var i, k0, kol : integer;
      s : string;
begin
  s := '';
  k0 := A[Low(A)];
  kol := 1;
  s := IntToStr(k0);
  for i:=Low(A)+1 to High(A) do
    if A[i]<>k0+Kol then begin
       if Kol>1 then
          if Kol=2 then
              s := s + ',' + IntToStr(k0+Kol-1)
          else
              s := s + '-' + IntToStr(k0+Kol-1);
       k0 := A[i];
       kol := 1;
       s := s + ',' + IntToStr(k0);
    end
    else inc(Kol);

  {проверка на то, что массив закончился последовательностью}
  if kol>1 then
    if Kol=2 then
       s := s + ',' + IntToStr(k0+Kol-1)
    else
      s := s + '-' + IntToStr(k0+Kol-1);

  ArrayDigitToRange := s
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросик по курсововой Alex-Hot Фриланс 1 05.05.2010 07:48
Маленький вопросик))) Fintos Компьютерное железо 6 29.04.2009 18:54
Вопросик по циклу Almost_Famous Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.05.2008 21:45
есть вопросик. iamnemo Microsoft Office Excel 2 09.11.2006 16:21