Помощь - Поиск - Пользователи - Календарь
Полная версия: 2 задачи задачи на массив и индуктивность
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Black Monarh
Дорогие программисты буду с вами откровенен, я знаю что сдесь никто не будет делать за меня ничего!!
Но думаю что вы люди и поймете меня!
Я студет первого курса, думаю многие знают что 1 семестр самый сложный первая сессия и все такое!!
Меня мягко говоря выпирают, и как вы думаете почему?! ДА!! Был идиотом полнейшим!! нифига не делал думал а прокатит да не прокатила, так вот вишу я на волоске а внизу пропасть!!
У меня есть шанс остаться но сделать надо очень много... а времени почти нет..!!
Помогите мне пожалуйста спасите мою душу..
Беда вот в чем:
1. Мне нужно из данного массива (а массив мой 2 на 50, где каждая строка задает координату точки) так вот нужно убрать из этого массива одинаковые координаты т е одинаковыые строки!!


2. У меня есть последовательность чисел, нуйти длину законченного отрезка числовой последовательности, при этом свойсво отрезка с максимальным размахом значений элементов
P.S. размах - разность максимального и минимального элемента в добавок отрезок знакочередующийся
volvo
Цитата
нужно убрать из этого массива одинаковые координаты т е одинаковыые строки
Ну, так в чем проблема? Проходи в цикле по строкам, и для каждого элемента проверяй, не встречался ли он прежде... Если нет - все в порядке, если встречался - сдвигай все содержимое массива на 1 индекс ближе к началу, начиная с элемента, следующего за проверяемым, и уменьшай счетчик элементов массива...

Где именно проблема?
Black Monarh
Вот как раз на словах я то все и понимаю, да надо пойтись циклом по массиву смотря если есть одинуковые строки то сдвигать .. А как это выглядит в коде не могу воспроизвести не знаю что я не понимаю вроде так элементарно(( а вот не могу и все!! жесть!
volvo
Ну, вот тебе пример для массива целых, хотя по-моему, я уже выкладывал на форуме нечто подобное... Подкорректируй это для своего случая.
const
  max_n = 10;
  arr: array[1 .. max_n] of integer =
    (1, 3, 7, 3, 9, 4, 2, 2, 3, 1);

var
  i, j, k, n: integer;
  found: boolean;

begin
  n := max_n;
  i := 2;
  while i <= n do begin

    found := false; j := 1;

    while (j < i) and (not found) do
      if arr[i] = arr[j] then found := true
      else inc(j);

    if found then begin
      for k := i + 1 to n do
        arr[k - 1] := arr[k];
      dec(n);
    end
    else inc(i)
  end;

  for i := 1 to n do
    write(arr[i]:4);
  writeln;
end.
Black Monarh
Спасибо понятно, а на счет второй задачки никаких мыслей нет?! Потомучто я вообще не знабю индуктивность!!
Lapp
Цитата(Black Monarh @ 28.01.2006 18:53) *

Спасибо понятно, а на счет второй задачки никаких мыслей нет?! Потомучто я вообще не знабю индуктивность!!

Условие не совсем понятно. Уточни, насколько возможно.
И при чем тут индуктивность?..
klem4
Цитата
1. Мне нужно из данного массива (а массив мой 2 на 50, где каждая строка задает координату точки) так вот нужно убрать из этого массива одинаковые координаты т е одинаковыые строки!!


по моему это решается так :

uses crt;
const
   m = 2;
type
   TMx = array [1..50,1..m] of integer;

procedure Input(var mx : TMx; n : byte);
var
   i,j : byte;
begin
   writeln;
   for i := 1 to n do
    for j := 1 to m do begin
       write('x[',i,',',j,']=');
       readln(mx[i,j]);
    end;
end;

procedure Print(mx : TMx; n : byte);
var
   i,j : byte;
begin
   writeln;
   for i := 1 to n do begin
      writeln;
      for j := 1 to m do write(mx[i,j]:2,' ');
   end;
end;

procedure Del(var mx : TMx; var n : byte);
var
   i,j,k : byte;
   flag,flag1 : boolean;
begin
   i := 1;
   while(i <= n-1) do begin
      j := i + 1;
      flag := true; flag1 := true;
      while(j <= n) do begin
         flag := true;
         if (mx[i,1] = mx[j,1]) and (mx[i,2] = mx[j,2]) then begin
            flag := false; flag1 := false;
            for k := j to n do begin
               mx[k,1] := mx[k+1,1];
               mx[k,2] := mx[k+1,2];
            end;{k}
            dec(n);
         end;{=}
         if flag then inc(j);
      end;{J}
      if flag1 then inc(i) else begin
         for k := i to n do begin
            mx[k,1] := mx[k+1,1];
            mx[k,2] := mx[k+1,2];
         end;
         dec(n);
      end;
   end;{I}

end;

var
   a : TMx;
   n : byte;

begin
   clrscr;
   n := 10;
   Input(a,n);
   Print(a,n);
   Del(a,n);
   Print(a,n);
   readln;
end.


Цитата

n = 10

in :
1 1
2 2
3 3
1 1
4 4
2 2
5 5
6 6
1 1
4 4

out :
3 3
5 5
6 6


Извиняюсь если намудрил сильно ..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.