Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
#1

Дан массив A(N) - C++

31.10.2011, 19:13. Просмотров 826. Ответов 18
Метки нет (Все метки)

помогите пожалуйста.
Дан массив A(N) найти пару соседних элементов наиболее близко расположенных друг к другу . Мера близости R = |A[i+1]-[i] |
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 19:13     Дан массив A(N)
Посмотрите здесь:

Дан массив Z(15). Сформировать массив В следующим образом C++
Дан массив чисел C++
C++ Дан массив
C++ Дан массив из N
Дан массив C++
C++ Дан массив M на N.....
C++ Дан массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,367
Записей в блоге: 3
31.10.2011, 20:58     Дан массив A(N) #2
Помогаю. Очевидно ли вам, что это задача на своеобразный поиск минимума?
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:13  [ТС]     Дан массив A(N) #3
Цитата Сообщение от Predator_2004 Посмотреть сообщение
Очевидно ли вам, что это задача на своеобразный поиск минимума?
ээээ нет....
а оно так?

Добавлено через 2 минуты
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <math.h>
#include <conio.h>
 
void main()
{
 int ar[], r, i;
  for (i=1, ar[]<i,)
   {
    scanf ("%f" &ar[N]);
    r= abs(ar[1]-ar[2]);
   }
    for (i=2, ar[N-1])
    {
     if (abs(a[i+1]-a[i]) < r) then
     r= abs(a[i+1]-a[i]);
    }
}

что то типа такого? потому что?

З.Ы. me gusta!) ваще туплю и много знаю что ошибок
Сыроежка
Заблокирован
01.11.2011, 19:15     Дан массив A(N) #4
Цитата Сообщение от cheser Посмотреть сообщение
помогите пожалуйста.
Дан массив A(N) найти пару соседних элементов наиболее близко расположенных друг к другу . Мера близости R = |A[i+1]-[i] |
В С++ есть такой стандартный алгоритм, кеоторый называется std::adjacent_find, и который выполняет вашу задачу в одну строчку!
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:17  [ТС]     Дан массив A(N) #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
В С++ есть такой стандартный алгоритм, кеоторый называется std::adjacent_find, и который выполняет вашу задачу в одну строчку!
друг я тебе верю тока как это понять тогда и есть ли она в Turbo C если честно я полный нуб и С тока проходим...
Сыроежка
Заблокирован
01.11.2011, 19:21     Дан массив A(N) #6
Цитата Сообщение от cheser Посмотреть сообщение
друг я тебе верю тока как это понять тогда и есть ли она в Turbo C если честно я полный нуб и С тока проходим...
ТОгда тебе самому придется писать этот алгоритм! В цикле сравниваешь два соседних элемента массива в соответсвии с заданным условием. Если условие выполняется, выходишь из цикла.
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:22  [ТС]     Дан массив A(N) #7
Цитата Сообщение от Сыроежка Посмотреть сообщение
ТОгда тебе самому придется писать этот алгоритм! В цикле сравниваешь два соседних элемента массива в соответсвии с заданным условием. Если условие выполняется, выходишь из цикла.
дык тогда я правильно написал примерно или нет? или ваще не туда пошел?
Сыроежка
Заблокирован
01.11.2011, 19:27     Дан массив A(N) #8
Цитата Сообщение от cheser Посмотреть сообщение
ээээ нет....
а оно так?

Добавлено через 2 минуты
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <math.h>
#include <conio.h>
 
void main()
{
 int ar[], r, i;
  for (i=1, ar[]<i,)
   {
    scanf ("%f" &ar[N]);
    r= abs(ar[1]-ar[2]);
   }
    for (i=2, ar[N-1])
    {
     if (abs(a[i+1]-a[i]) < r) then
     r= abs(a[i+1]-a[i]);
    }
}

что то типа такого? потому что?

З.Ы. me gusta!) ваще туплю и много знаю что ошибок
Во-первых, массив ar[] объявляется как целочисленный, а ввести в него пытаетесь значения типа float.
Цикл для ввода вообще некорректно написан.
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:31  [ТС]     Дан массив A(N) #9
Цитата Сообщение от Сыроежка Посмотреть сообщение
Во-первых, массив ar[] объявляется как целочисленный, а ввести в него пытаетесь значения типа float.
Цикл для ввода вообще некорректно написан.
это в scanf??? %f , а надо %i

Добавлено через 2 минуты
+ ща заметил что N не объявлена как переменная и думаю что она и не понадобится т.к. его заменю на i
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,367
Записей в блоге: 3
01.11.2011, 19:33     Дан массив A(N) #10
Цитата Сообщение от Сыроежка Посмотреть сообщение
В С++ есть такой стандартный алгоритм, кеоторый называется std::adjacent_find, и который выполняет вашу задачу в одну строчку!
Если мне не изменяет память, adjacent_find ищет первую пару одинаковых соседних элементов из диапазона итераторов. А это не то.

Цитата Сообщение от cheser Посмотреть сообщение
наиболее близко расположенных друг к другу
это означает, что значение R в вашей формуле должно быть минимальным. То есть нужно перебрать все пары i,i+1 определить для них R, и для минимального вывести элементы на экран. Вроде как мог разжевал.
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:39  [ТС]     Дан массив A(N) #11
Цитата Сообщение от Predator_2004 Посмотреть сообщение
это означает, что значение R в вашей формуле должно быть минимальным. То есть нужно перебрать все пары i,i+1 определить для них R, и для минимального вывести элементы на экран. Вроде как мог разжевал.
то бишь мне нужно что то тика такого:
C
1
2
3
4
5
6
7
min=R;
R=i+1;
for (i=2, i<=ar[], i++)
 {
if (R < min) min=R
R++
 }
я понятно понял?
Сыроежка
Заблокирован
01.11.2011, 19:40     Дан массив A(N) #12
Цитата Сообщение от Predator_2004 Посмотреть сообщение
Если мне не изменяет память, adjacent_find ищет первую пару одинаковых соседних элементов из диапазона итераторов. А это не то.
Невнимательно прочитал. Я думал найти первую пару, удовлетворяющую заданному условию.
Значит тиогда построить вектор из значений условий для элементов, а затем найти минимальное значение.
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,367
Записей в блоге: 3
01.11.2011, 19:46     Дан массив A(N) #13
Цитата Сообщение от cheser Посмотреть сообщение
я понятно понял?
Не знаю, что вы там поняли. Давайте разберем ваш код.
Цитата Сообщение от cheser Посмотреть сообщение
C
1
2
3
4
5
6
7
min=R;
R=i+1;
for (i=2, i<=ar[], i++)
*{
if (R < min) min=R
R++
*}
Начнем с явного. Для каждой пары R различно. У вас R задано вообще вне цикла, соответственно от индекса не зависит. Второе, видите ли вы сходство между формулой из условия и тем, что в коде? Я - нет. Остальное типа точек с запятой, организацию цикла и пр. пока опущу.
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 20:07  [ТС]     Дан массив A(N) #14
ааа я тут сравнивать начал(точнее все элементы с минимальным), мне тока 1 строчка подходит а после if выполняю мое условие r= abs(a[i+1]-a[i]);

Добавлено через 2 минуты
я ar не дописываю пишу а

Добавлено через 12 минут
подвожу итог рассуждений:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <math.h>
#include <conio.h>
 
void main()
{
 int ar[], i, a, *r, *min;
 r=a;
  for (i=1, ar[i]<i,i++)
   scanf ("%i", r++);
    min=a;
    r=a+1;
     for (i=2, 1<=ar[i], i++)
    {
     if (r<min) 
      r= abs(ar[i+1]-ar[i]);
       printf("%i", r);
    }
}
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,367
Записей в блоге: 3
01.11.2011, 20:20     Дан массив A(N) #15
Цитата Сообщение от cheser Посмотреть сообщение
подвожу итог рассуждений:
У вас вообще компилятор есть, или вы так кодите? В общем итог неутешительный.
cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 20:27  [ТС]     Дан массив A(N) #16
печалька кончено имеется, в блокноте просто набирать удобней потом просто расширение менять и смотреть

Добавлено через 4 минуты
ну а какой итог правильный ? вы бы хоть показали бы часть кода, а то глаза бегут туда сюда)
С ругается)))
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,367
Записей в блоге: 3
01.11.2011, 20:33     Дан массив A(N) #17
Цитата Сообщение от cheser Посмотреть сообщение
С ругается
Конечно ругается. Вы зачем-то объявили два указателя, не знаете как читать данные с клавиатуры и тд. Сделаем так: хорошо продумайте алгоритм работы программы, а уж код до ума потом будем доводить.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
01.11.2011, 21:16     Дан массив A(N) #18
Цитата Сообщение от cheser Посмотреть сообщение
Дан массив A(N) найти пару соседних элементов наиболее близко расположенных друг к другу . Мера близости R = |A[i+1]-[i] |
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
#define N           20
#define RANGE_MIN -100
#define RANGE_MAX  100
 
int closeness(int a, int b)
{
        return abs(a - b);
}
 
int main()
{
        int arr[N], i, dist, *p, *r;
 
        printf("array: ");
        srand(time(NULL));
        for (i = 0; i < N; i++)
                printf("%d ",
                        arr[i] = RANGE_MIN + rand() % (RANGE_MAX-RANGE_MIN+1));
        r = arr;
        dist = closeness(arr[0], arr[1]);
        for (p = arr + 1; p < arr + N - 1; p++) 
                if ((i = closeness(*p, *(p+1))) < dist) {
                        dist = i;
                        r = p;
                }
        printf("\nthe closest pair is %d and %d\n", *r, *(r+1));        
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 10:39     Дан массив A(N)
Еще ссылки по теме:

C++ Дан массив
C++ Дан массив (codeblocks10.04)
C++ дан массив. Если ввести 2 целых числа, то массив в диапазоне между этими числами приобретет максимальное значение массива
C++ Дан массив А[13], переписать его в массив B

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Sherniyaz
Сообщений: n/a
02.11.2011, 10:39     Дан массив A(N) #19
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
#define N           20
#define RANGE_MIN -100
#define RANGE_MAX  100
 
int closeness(int a, int b)
{
        return abs(a - b);
}
 
int main()
{
        int arr[N], i, dist, *p, *r;
 
        printf("array: ");
        srand(time(NULL));
        for (i = 0; i < N; i++)
                printf("%d ",
                        arr[i] = RANGE_MIN + rand() % (RANGE_MAX-RANGE_MIN+1));
        r = arr;
        dist = closeness(arr[0], arr[1]);
        for (p = arr + 1; p < arr + N - 1; p++) 
                if ((i = closeness(*p, *(p+1))) < dist) {
                        dist = i;
                        r = p;
                }
        printf("\nthe closest pair is %d and %d\n", *r, *(r+1));        
        return 0;
}
спасибо больше тока теперь буду разбераться что такое time.h и stdlib.h гугол мне в помощь даже с 1-го раза непонял что это такое
Yandex
Объявления
02.11.2011, 10:39     Дан массив A(N)
Ответ Создать тему
Опции темы

Текущее время: 13:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru