Модераторы: volvo877, Snowy, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Моя первая задача, Объясните плз. как её решить 
:(
    Опции темы
champion
Дата 1.8.2005, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Начал изучать Паскаль, все бы ничего, но никак не могу решить задачу, объясните плз логику решения, н и как решить..
Вот условие:
Цитата

В массиве длины N содержаться все целые числа от 0 до N, кроме одного. Найти пропущенное число. Вводить дополнительные массивы не разрешается.
Пример: N=5 (4,2,5,0,1). Ответ: пропущено число 3



--------------------
user posted image
PM MAIL   Вверх
Romtek
Дата 1.8.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Отсортировать по возрастанию и потом проверить поэлементно возрастающую последовательность. Если B > A + 1 then ....
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
maxim1000
Дата 1.8.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Отсортировать по возрастанию и потом проверить поэлементно возрастающую последовательность. Если B > A + 1 then ....

ну зачем же так грубо...
посчитать сумму всех имеющихся чисел (пусть это будет S)
а пропущенное число=N*(N+1)/2 - S smile


--------------------
qqq
PM WWW   Вверх
champion
Дата 1.8.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возникат глупый вопрос, как можно посчитать сумму всех элементов массива?


--------------------
user posted image
PM MAIL   Вверх
Pakshin A. S.
Дата 1.8.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(champion @ 1.8.2005, 12:55)
Возникат глупый вопрос, как можно посчитать сумму всех элементов массива?

Lenght(massiv);
PM   Вверх
champion
Дата 1.8.2005, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот код:
Код

program zadacha;
var i,S:integer;
var arr:array[0..5] of integer;
begin
  for i:=0 to high(arr) do readLn(arr[i]);
  S:=length(arr);
  writeLn('‘Сумма всех элементов: ',S);
  readLn;
end.

Ошибку выдает.. что-то я совсем запутался =((


--------------------
user posted image
PM MAIL   Вверх
volvo877
Дата 1.8.2005, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



champion, вот так попробуй...
Код
...
  s := 0;
  {
    Если ты пользуешься high, то уже будь последовательным,
    и пользуйся low тоже...
  }
  for i:=low(arr) to high(arr) do begin
    readLn(arr[i]); Inc(s, arr[i]);
  end;
  writeLn('‘Сумма всех элементов: ',S);
...

PM MAIL   Вверх
champion
Дата 1.8.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Опять что-то не то, выдает ошибки. вот код
Код

program zadacha;
CONST N=5;
var i,S,res:integer;
var arr:array[0..N] of integer;
begin
 s := 0;
  for i:=low(arr) to high(arr) do begin
    readLn(arr[i]); Inc(s, arr[i]);
  end;
  writeLn('‘㬬  ўбҐе н«Ґ¬Ґ­в®ў: ',S);
  res:=N*(N+1)/2-S;
  writeLn('?а®Їгг饭­®Ґ зЁб«®: ',res);
end.


Это сообщение отредактировал(а) Fedor - 3.8.2005, 15:38


--------------------
user posted image
PM MAIL   Вверх
volvo877
Дата 1.8.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



champion,
у тебя 2 недочета:
1) когда ты объявляешь массив как array[0 .. 5] of integer, это значит, что он будет содержать не 5, а 6 элементов ("0, 1, 2, 3, 4, 5" - итого 6)... Но так, как это тебе не нужно (ноль по-любому на результат не влияет) - делай или
Код
Var arr: Array[0 .. N-1] Of Integer;

или
Код
Var arr: Array[1 .. N] Of Integer;
, чтобы не вводить лишний "0"

2) в Паскале операция деления " / " возвращает результат вещественного типа, а ты пытаешься "затолкнуть" его в целочисленную переменную... Так не пойдет. Используй целочисленное деление:
Код
res:=N*(N+1) Div 2 - S;


Это сообщение отредактировал(а) volvo877 - 1.8.2005, 14:06
PM MAIL   Вверх
Zero
Дата 1.8.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(champion @ 1.8.2005, 09:38)
объясните плз логику решения

Также можно использовать тип множество...
Алгоритм:
1. Сначало множество должно заполнится числами всеми от 0 до N
2. При вводе твоих чисел, элементы из множества, по одному удаляются
3. Оставшиеся элементы в множестве, и есть твоё решение... smile
Добавлено @ 21:40
Цитата(volvo877 @ 1.8.2005, 14:03)
чтобы не вводить лишний "0"

Нее так не пойдёт, в задании сказано что от 0 до N...
Цитата(volvo877 @ 1.8.2005, 14:03)
Используй целочисленное деление:

Так тоже не пойдёт, есть вероятность получить вычислительную ошибку, которая не будет определятся компилятором, в следствии чего не правилый результат...
Лучше менять метод, если не уверен на 100% что текущий хорошо работает...
ИМХО тот метод что я предложил выше, ислключает все подобные ошибки. smile
PM MAIL ICQ   Вверх
volvo877
Дата 1.8.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Zero @ 1.8.2005, 21:33)
тот метод что я предложил выше, ислключает все подобные ошибки.

А теперь вопрос на засыпку: а как ты собрался извлекать элемент из множества? Полным перебором? Так вот это СОВСЕМ не пойдет !!! Ты сразу потерял все преимущества использования множеств...

Теперь дальше... Вот что видим в первом посте:
Цитата(champion @ 1.8.2005, 09:38)
Пример: N=5 (4,2,5,0,1)
И где же у нас 6 элементов? Я вижу только 5, может что-то у меня с глазами? Так что не надо вводить шестой, вводим 5 и по ним определяем недостающий...

Кстати, вот еще вариант:
Код
Const n = 5;
var
  i, S, should_be: integer;
  arr: array[1 .. N] of integer;
begin
  s := 0; should_be := 0;
  for i:=low(arr) to high(arr) do begin
    readLn(arr[i]);
    Inc(s, arr[i]); Inc(should_be, i);
  end;
  WriteLn('Недостающее число: ', should_be - s);
end.

PM MAIL   Вверх
Zero
Дата 2.8.2005, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(volvo877 @ 1.8.2005, 22:08)
А теперь вопрос на засыпку: а как ты собрался извлекать элемент из множества? Полным перебором? Так вот это СОВСЕМ не пойдет !!! Ты сразу потерял все преимущества использования множеств...

Берёш на слабо, кто чё потерял... smile Вот как я собрался извлекать из множества:
Код

program pr;
var
  m:set of byte;
  i,N,q:integer;
begin
  {Ввод количества чисел}
  write('Введите количество чисел > N='); 
  readln(N);
  
  {1-ый шаг моего алгоритма, описанного выше}
  m:=[];
  for i:=0 to N do
    m:=m+[i];

  {2-ой шаг моего алгоритма, описанного выше}
  for i:=0 to N-1 do
    begin
      write('Введите ',i,'-oe число массива >');
      read(q);
      m:=m-[q];  {А вот так я собрался извлекать элемент из множества}
    end;

  {3-ий шаг моего алгоритма, описанного выше}
  for i:=0 to 9 do
    if i in M then
      writeln('Недостающий элемент >',i);
end.

Цитата(volvo877 @ 1.8.2005, 22:08)
И где же у нас 6 элементов?
Во всём массивк их шесть, а вводят 5, чтобы по ним определить недостающий шестой... smile
Цитата(volvo877 @ 1.8.2005, 22:08)
может что-то у меня с глазами?
Неее... Скорее с головой, а точнее с мозгами... smile
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 2.8.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Слово против множества:
Как мне понимается число N может быть любое, а точнее для примера N=1000. Что тогда с множеством будет? Массив тако длины должен вроде поместиться в память, а вот множество не очень согласится с идеей впихивания в него чисел такого размера... Можно конечно использовать несколько множеств для реализации массива длиной N=32000, что теоритически имеет место в задача, т. к. вообще ограничения каке-либо отсутствуют...
PM   Вверх
champion
Дата 2.8.2005, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сорри конечно =)) Но разговора о мнеожестве в условии нету =)) Там разговор о массиве


--------------------
user posted image
PM MAIL   Вверх
champion
Дата 2.8.2005, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



volvo877, большое спасибо ему! Было бы 100 постов, добавил репутации! Его пример как-раз то, что нужно! Респект!


--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

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


 




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


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

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