0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
1

Дан массив A(N)

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

Author24 — интернет-сервис помощи студентам
помогите пожалуйста.
Дан массив A(N) найти пару соседних элементов наиболее близко расположенных друг к другу . Мера близости R = |A[i+1]-[i] |
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2011, 19:13
Ответы с готовыми решениями:

Дан массив, состоящий из 15 элементов целого типа. Получить новый массив, как разность между элементами исходного массив
Дан массив, состоящий из 15 элементов целого типа. Получить новый массив, как разность между...

Дан массив. Записать во второй массив все элементы, не совпадающие с минимальным
Дан массив M(14).Записать в массив B все элементы , не совпадающие с минимальным. Cоставить блок...

Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке.
Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой...

Дан массив из 0 и 1.Вывести этот массив на экран и подсчитать количество 0 и 1
#include "stdafx.h" #include "windows.h" #include "iostream" using namespace std; int...

18
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
31.10.2011, 20:58 2
Помогаю. Очевидно ли вам, что это задача на своеобразный поиск минимума?
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:13  [ТС] 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!) ваще туплю и много знаю что ошибок
0
Заблокирован
01.11.2011, 19:15 4
Цитата Сообщение от cheser Посмотреть сообщение
помогите пожалуйста.
Дан массив A(N) найти пару соседних элементов наиболее близко расположенных друг к другу . Мера близости R = |A[i+1]-[i] |
В С++ есть такой стандартный алгоритм, кеоторый называется std::adjacent_find, и который выполняет вашу задачу в одну строчку!
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:17  [ТС] 5
Цитата Сообщение от Сыроежка Посмотреть сообщение
В С++ есть такой стандартный алгоритм, кеоторый называется std::adjacent_find, и который выполняет вашу задачу в одну строчку!
друг я тебе верю тока как это понять тогда и есть ли она в Turbo C если честно я полный нуб и С тока проходим...
0
Заблокирован
01.11.2011, 19:21 6
Цитата Сообщение от cheser Посмотреть сообщение
друг я тебе верю тока как это понять тогда и есть ли она в Turbo C если честно я полный нуб и С тока проходим...
ТОгда тебе самому придется писать этот алгоритм! В цикле сравниваешь два соседних элемента массива в соответсвии с заданным условием. Если условие выполняется, выходишь из цикла.
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:22  [ТС] 7
Цитата Сообщение от Сыроежка Посмотреть сообщение
ТОгда тебе самому придется писать этот алгоритм! В цикле сравниваешь два соседних элемента массива в соответсвии с заданным условием. Если условие выполняется, выходишь из цикла.
дык тогда я правильно написал примерно или нет? или ваще не туда пошел?
0
Заблокирован
01.11.2011, 19:27 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.
Цикл для ввода вообще некорректно написан.
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:31  [ТС] 9
Цитата Сообщение от Сыроежка Посмотреть сообщение
Во-первых, массив ar[] объявляется как целочисленный, а ввести в него пытаетесь значения типа float.
Цикл для ввода вообще некорректно написан.
это в scanf??? %f , а надо %i

Добавлено через 2 минуты
+ ща заметил что N не объявлена как переменная и думаю что она и не понадобится т.к. его заменю на i
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.11.2011, 19:33 10
Цитата Сообщение от Сыроежка Посмотреть сообщение
В С++ есть такой стандартный алгоритм, кеоторый называется std::adjacent_find, и который выполняет вашу задачу в одну строчку!
Если мне не изменяет память, adjacent_find ищет первую пару одинаковых соседних элементов из диапазона итераторов. А это не то.

Цитата Сообщение от cheser Посмотреть сообщение
наиболее близко расположенных друг к другу
это означает, что значение R в вашей формуле должно быть минимальным. То есть нужно перебрать все пары i,i+1 определить для них R, и для минимального вывести элементы на экран. Вроде как мог разжевал.
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 19:39  [ТС] 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++
 }
я понятно понял?
0
Заблокирован
01.11.2011, 19:40 12
Цитата Сообщение от Predator_2004 Посмотреть сообщение
Если мне не изменяет память, adjacent_find ищет первую пару одинаковых соседних элементов из диапазона итераторов. А это не то.
Невнимательно прочитал. Я думал найти первую пару, удовлетворяющую заданному условию.
Значит тиогда построить вектор из значений условий для элементов, а затем найти минимальное значение.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.11.2011, 19:46 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 задано вообще вне цикла, соответственно от индекса не зависит. Второе, видите ли вы сходство между формулой из условия и тем, что в коде? Я - нет. Остальное типа точек с запятой, организацию цикла и пр. пока опущу.
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 20:07  [ТС] 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);
    }
}
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.11.2011, 20:20 15
Цитата Сообщение от cheser Посмотреть сообщение
подвожу итог рассуждений:
У вас вообще компилятор есть, или вы так кодите? В общем итог неутешительный.
0
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
01.11.2011, 20:27  [ТС] 16
печалька кончено имеется, в блокноте просто набирать удобней потом просто расширение менять и смотреть

Добавлено через 4 минуты
ну а какой итог правильный ? вы бы хоть показали бы часть кода, а то глаза бегут туда сюда)
С ругается)))
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.11.2011, 20:33 17
Цитата Сообщение от cheser Посмотреть сообщение
С ругается
Конечно ругается. Вы зачем-то объявили два указателя, не знаете как читать данные с клавиатуры и тд. Сделаем так: хорошо продумайте алгоритм работы программы, а уж код до ума потом будем доводить.
0
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
01.11.2011, 21:16 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;
}
1
Sherniyaz
02.11.2011, 10:39 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-го раза непонял что это такое
02.11.2011, 10:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2011, 10:39
Помогаю со студенческими работами здесь

Дан массив X(10). Сформировать новый массив из четных чисел исходного
Помогите, кому не сложно, спасибо заранее :)

Дан массив. Создать массив 2 из четных чисел первого массива
Задача: Дан массив. Создать новый массив из чётных чисел исходного массива. #endif #include...

Дан массив из 25 элементов. Сформировать из него новый массив, элементы которого кратны 5
Помогите решить задачу. Дан массив из 25 элементов. Сформировать из него новый массив, элементы...

Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству
Дан массив A. заполнить массив В элементами массива A, которые удовлетворяют двойному неравенству:...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru