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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Минимальная разность элементов 
:(
    Опции темы
b44
Дата 24.5.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



проверьте пожалуйста!!!

прога должна ноходить мин разность любых элементов и выводить номера элементов с наименьшей разностью

Код

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define n 5
void main()
{
clrscr();
randomize();
int a[n],g,min,y;
  for (int i=0;i<n;i++)
  {
  a[i]=random(20)+1;
  cout <<a[i]<<' ';
  }
  cout<< '\n';
       min=abs(a[0]+a[1]);
       for (int s=0; s<n; s++)
       {
      for (int d=s+1; d<n; d++)
      {
      a[y]=abs(a[s]-a[d]);
      if (a[y]<min) min=a[y];
      cout<<a[y]<<' ';
      y=y+1;
      }
       }
     cout << '\n'<<min<<"-->";

     for ( int p=0; p<n; p++)
     {
      for ( int l=p+1; l<n; l++)
      {
      g=abs(a[p]-a[l]);
      if (g==min)
      cout<<p+1<<' '<<l+1<<';'<<' ';
      }
      }
getch();
}
 
PM MAIL   Вверх
mr.Anderson
Дата 24.5.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Так. Разбираем по порядку.
Код

#define n 5

Привыкни это заменять на такое:
Код

const int n=5;

Дальше.
Код

void main()

Привыкни писать так:
Код

int main(void)

Затем. Ошибка в 10-й строчке:
Код

int a[n],g,min,y;

Во-первых, MIN не инициализируется. Почему? Потом в коде происходит ее сравнение с другой переменной. Если в ней нет первоначального значения, в ней "мусор". Это значит, что условие сравнения может и "пролететь". Для этого лучше дать ей значение, любое. Плюс, переменная Y лишняя, ее можно объявить прямо в цикле повторения for. Получаем следующее:
Код

int a[n],
     g,
     min=1000;

Много ошибок в циклах повтора.
Код

for (int s=0; s<n; s++)
       {
      for (int d=s+1; d<n; d++)
      {
      a[y]=abs(a[s]-a[d]);
      if (a[y]<min) min=a[y];
      cout<<a[y]<<' ';
      y=y+1;
      }
       }

Вот объясни мне, для чего здесь два цикла? Плюс с использованием тьмы ненужных переменных? Меняем на вот такое:
Код

for(int y=0; y<n; y++)
 {
  a[y]=abs(a[y]-a[y+1]);
  if (a[y]<min) min=a[y];
  cout<<a[y]<<" ";
 }

Не правда ли, так куда проще и правильней?
Код

for ( int p=0; p<n; p++)
     {
      for ( int l=1; l<n; l++)
      {
      g=abs(a[p]-a[l]);
      if (g==min)
      cout<<p+1<<' '<<l+1<<';'<<' ';      }
      }

Зачем так? Меняем на такое:
Код

for(int p=0; p<n; p++)
  for(int l=1; l<n; l++)
  {
   g=abs(a[p]-a[l]);
   if (g==min)
   cout<<a[l]<<" "<<a[l+1]<<";"<<" ";
  }


Вот. В итоге получаем следующий код:
Код

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

//-------------------------------------------------
int main(void)
{
 const int n=5;
 int a[n],
      g,
      min=1000;

 clrscr();
 randomize();

 for (int i=0;i<n;i++)
 {
  a[i]=random(20)+1;
  cout <<a[i]<<" ";
 }

 cout<<"\n";

 min=a[0]+a[1];

 for(int y=0; y<n; y++)
 {
  a[y]=abs(a[y]-a[y+1]);
  if (a[y]<min) min=a[y];
  cout<<a[y]<<" ";
 }

 cout<<"\n"<<min<<" --> ";

 for(int p=0; p<n; p++)
  for(int l=1; l<n; l++)
  {
   g=abs(a[p]-a[l]);
   if (g==min)
   cout<<a[l]<<" "<<a[l+1]<<";"<<" ";
  }

 getch();
}
//-------------------------------------------------
   

Это сообщение отредактировал(а) sim7 - 24.5.2006, 17:49


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
b44
Дата 24.5.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Sim7 ты написал полную чуш!!! запусти мой код там все правильно!!! я тебе писал что разность не соседних чисел а ЛЮБЫХ!!!
у меня после компиляции выводит хер знает что!!!


короче мой код правильный за исключением некоторых помарок к которым ты привык!!! 
PM MAIL   Вверх
mr.Anderson
Дата 24.5.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Не надо шуметь. Объяснять надо уметь задание как следует.
Код

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

//-------------------------------------------------
int main(void)
{
 const int n=5;
 int a[n],
      g,
      min=1000,
      y=0;

 clrscr();
 randomize();

 for (int i=0;i<n;i++)
 {
  a[i]=random(20)+1;
  cout <<a[i]<<" ";
 }

 cout<<"\n";

 min=a[0]+a[1];

 for (int s=0; s<n; s++)
  for (int d=s+1; d<n; d++)
  {
   a[y]=abs(a[s]-a[d]);
   if (a[y]<min) min=a[y];
   cout<<a[y]<<' ';
   y+=1;
  }
  
 cout<<"\n"<<min<<" --> ";

 for(int p=0; p<n; p++)
  for(int l=1; l<n; l++)
  {
   g=abs(a[p]-a[l]);
   if (g==min)
   cout<<p+1<<' '<<l+1<<';'<<' ';
  }

 getch();
}
//-------------------------------------------------
  

Это сообщение отредактировал(а) sim7 - 24.5.2006, 18:16


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 24.5.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

#include <map>
#include <vector>

using std::pair;
using std::vector;

inline int abs(int i) {return i>=0 ? i: -i;}

pair<int, int> min_sub(const vector<int>& vector_)
{
    pair<int, int> pair_(-1,-1);
    int min=-1;
    for (vector<int>::const_iterator i=vector_.begin(); i!=vector_.end(); ++i)
    {
        vector<int>::const_iterator j=i;
        ++j;
        for (; j!=vector_.end(); ++j)
        {
            int temp;
            if (min==-1 || (temp=abs(*j-*i))<min)
            {
                min=temp;
                pair_.first=i-vector_.begin();
                pair_.second=j-vector_.begin();
            }
        }
    }
    return pair_;
}
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
b44
Дата 25.5.2006, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



кому надо правильный код
вот он! с учетом того что номера могут быть не только соседними!


Код

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define n 4
void main()
{
clrscr();
randomize();
int a[n],min,g,c,v;
  for (int i=0;i<n;i++)
  {
  a[i]=random(20)+1;
  cout <<a[i]<<' ';
  }
  cout<< '\n';
       min=abs(a[0]+a[1]);
       for (int s=0; s<n; s++)
       {
     for (int d=s+1; d<n; d++)
     {
     v=abs(a[s]-a[d]);
     if (v<min) min=v;
     cout<<v<<' ';
     }
       }
    cout << '\n'<<min<<"-->";

    for ( int p=0; p<n; p++)
    {
     for ( int l=p+1; l<n; l++)
     {
     g=abs(a[p]-a[l]);
     if (g==min)
     cout<<p+1<<' '<<l+1<<';'<<' ';
     }
     }
getch();
}
 
PM MAIL   Вверх
nostromo
Дата 25.5.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



(В рамках небольшого флейма.)
Уважаемый b44, наиболее точная характеристика Вашему образу в этом топике, пожалуй, "воинствующее невежество". 

Если писать на C++ так, как привыкли на C, то дальше учебных программ Вы не уйдете. Основной смысл критики языка С++ состоит в том, что он слишком легко позволяет писать "плохие" программы (трудно читаемые, модифицируемые, отлаживаемые, ...). Выработать хороший стиль без помощи гуру очень трудно.

Вместо того, чтобы огрызаться, лучше поитересовались бы, чем другой подход может быть лучше Вашего. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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