Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Выбор в массиве определенных членов. 
V
    Опции темы
InviZible
Дата 7.10.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Даны натуральные n, целые числа a1......an. Внутри данной последовательности могут быть повторяюшиеся члены. Получить числа. взятые по одному из каждой группы равных членов.

я делал так :

Код


Program laba3;
Uses Crt;
Var
 a:array[1..10000] of integer;
 k,i,n:integer;
Begin
 ClrScr;

 WriteLn('***************************');
 WriteLn('Vvedi n. 0 < n <=10000 ');
 ReadLn(n);
 WriteLn('***************************');

 for i:=1 to n do
  begin
   WriteLn('Enter a[',i,']');
   ReadLn(a[i]);
  end;

 WriteLn('***************************');

 Write('Massiv zapolnen. Sosoit iz : ');

 for i:=1 to n do
  Write(a[i],' ');

  WriteLn;

 for i:=1 to n do
  begin
   for k:=1 to n do
    if a[i]=a[i+k] then
     begin
      WriteLn('============================');
      WriteLn('Vot chislo iz pari : ',a[i]);
      WriteLn('============================');
     end;
  end;

  WriteLn('That''s all.');
  ReadLn;
End.



Но мою лабуду заброкавали. Прога работает, но если вводить: n=4, а потом 3 3 3 3, то фигня получается. Так же проблема с нулями.
Сказали, что нужно переделать.

Заранее спасибо.

Это сообщение отредактировал(а) alexeis1 - 9.11.2006, 21:01
PM MAIL   Вверх
comtat
Дата 7.10.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 8
Всего: 71



Цитата(InviZible @  7.10.2006,  12:34 Найти цитируемый пост)
 n=4, а потом 3 3 3 3, то фигня получается

фигня в смысле, что выводит по несколько раз тройки (3) ??



--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
volvo877
Дата 7.10.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



Цитата(InviZible @  7.10.2006,  11:34 Найти цитируемый пост)
Внутри данной последовательности могут быть повторяюшиеся члены. Получить числа. взятые по одному из каждой группы равных членов.
Это делается так:
Код

Program laba3;
Uses Crt;
Var
 a:array[1..10000] of integer;
 k,i,n:integer;
Begin
 ClrScr;
 WriteLn('***************************');
 WriteLn('Vvedi n. 0 < n <=10000 ');
 ReadLn(n);
 WriteLn('***************************');
 for i:=1 to n do
  begin
   WriteLn('Enter a[',i,']');
   ReadLn(a[i]);
  end;
 WriteLn('***************************');
 Write('Massiv zapolnen. Sosoit iz : ');
 for i:=1 to n do
  Write(a[i],' ');
  WriteLn;

  i := 1;
  while i <= n do begin

    writeln('Число из группы: ', a[i]);
    while (a[i] = a[i+1]) and (i <= n - 1) do inc(i);
    inc(i);

  end;

  WriteLn('That''s all.');
  ReadLn;
End.

PM MAIL   Вверх
InviZible
Дата 7.10.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Ух ты, спасибо. Как быстро. Ты меня всегда спасаешь.
Но введи 4 а потом 3 3 2 1 и смотри, что он выдаст:

3
2
1

а нужно только 3
или 4 , а потом 1 2 3 4, будет 
1
2
3
4

а нужно ничего

Добавлено @ 12:58 
comtat, да
PM MAIL   Вверх
Kuvaldis
Дата 7.10.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



InviZible, 
тогда сначала сделать сортировку исходного массива.
Ты ж даже, похоже, и не пытался понять логику алгоритма, который тебе предложил VOLVO:  он основан на идее, что все повторяющиеся элементы идут подряд

Это сообщение отредактировал(а) Kuvaldis - 7.10.2006, 13:04


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
comtat
Дата 7.10.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 8
Всего: 71



либо заводить еще массив (B) размерностью n
в которой писать число из группы если его там до этого небыло  smile 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
volvo877
Дата 7.10.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



InviZible, задание внимательно читаем?

Цитата(InviZible @  7.10.2006,  11:34 Найти цитируемый пост)
Получить числа. взятые по одному из каждой группы равных членов.

И что? В массиве <1 2 3 4> есть 4 группы по одному члену... Вот ты их и печатаешь...


Kuvaldis, сортировать нельзя, группы перемешаются...
PM MAIL   Вверх
InviZible
Дата 7.10.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



нет, этоо вы не поняли.
Например, есть числа 10 20 30 10 55 44 11 20

вывести надо только 10 20 это точно!
PM MAIL   Вверх
Kuvaldis
Дата 7.10.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



volvo877, 
Цитата

Kuvaldis, сортировать нельзя, группы перемешаются...

Прочитал внимательнее, согласен с тобой.
InviZible,
если хочешь, чтобы выводились элементы из групп, в которых более одного элемента, то
 модифицированный вариант решения задачи Volvo. 
Код

Var
 a:array[1..1000] of integer;
 k,i,n, j :integer;
Begin
 WriteLn('***************************');
 WriteLn('Vvedi n. 0 < n <= 1000 ');
 ReadLn(n);
 WriteLn('***************************');
 for i := 1 to n do
  begin
   WriteLn('Enter a[',i,']');
   ReadLn(a[i]);
  end;
 WriteLn('***************************');
 Write('Massiv zapolnen. Sosoit iz : ');
 for i:=1 to n do
  Write(a[i],' ');
  WriteLn;
  i := 1;
  while i <= n do
  begin
    j := i;
    while (a[i] = a[i+1]) and (i <= n - 1) do
        inc(i);
    if (i - j > 0) then
       writeln('Number from group: ', a[j]);
    inc(i);
  end;
  WriteLn('That''s all.');    
  ReadLn;    
End.


Это сообщение отредактировал(а) Kuvaldis - 7.10.2006, 13:25


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
InviZible
Дата 7.10.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Уже ближе, но не так.
Введи n=6 и числа 6 7 8 8 7 8

будет только 8, а где же 7?
PM MAIL   Вверх
volvo877
Дата 7.10.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



Цитата
а где же 7? 
Да прочти ты задание, наконец!!! Семерки - в РАЗНЫХ группах !!!
PM MAIL   Вверх
Kuvaldis
Дата 7.10.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



Тогда сортировка и первоначальный вариант Volvo


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
InviZible
Дата 7.10.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Нужно именно так, как я говорю.
Т.е. если есть числа 7 8 21 23 8 7 2 1 7 8

то вывести 7 и 8

Уж вот такая у меня проблема.

Это сообщение отредактировал(а) InviZible - 7.10.2006, 19:48
PM MAIL   Вверх
Kuvaldis
Дата 7.10.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



InviZible, 
Тогда сортировка и мой вариант решения задачи
Цитата

Т.е. если есть числа 7 8 21 23 8 7 2 1 7 8

то вывести 7 и 8


после сортировки
1 2 7 7 7 8 8 8 23 21
теперь запускаешь мой вариант
который и выдаст 7 8



--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
InviZible
Дата 9.11.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Всем спасибо, вот мой вариант

Код

Program laba3; 
Uses Crt;
Var
 a:array[1..10000] of integer;
 d,p,j,i,n:integer;
Begin
 ClrScr;
 WriteLn('Vesion 0.3 . yes or die');
 WriteLn('***************************');
 WriteLn('Vvedi n. 0 < n <=10000 ');
 ReadLn(n);
 WriteLn('***************************');

 for i:=1 to n do
  begin
   WriteLn('Enter a[',i,']');
   ReadLn(a[i]);
  end;

 WriteLn('***************************');

 Write('Massiv zapolnen. Sosoit iz : ');

 for i:=1 to n do
  Write(a[i],' ');

  WriteLn;

 for i:=1 to n-1 do
  begin
   d:=0;
   p:=0;

   for j:=1 to i-1 do
    if a[j]=a[i] then inc(d);

   for j:=i+1 to n do
    if a[j]=a[i] then inc(p);

   if (p>0) and (d=0) then
    writeln('Chislo iz pari : ',a[i],' ');
  end;

 WriteLn('That''s all!');
 readln;
end.


Это сообщение отредактировал(а) alexeis1 - 9.11.2006, 21:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.2955 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.