Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
alex893
1 / 1 / 0
Регистрация: 15.12.2012
Сообщений: 15
1

Указатели: Поменять местами последний элемент с элементом, который ближе всего находится к среднему значению

17.02.2013, 21:11. Просмотров 611. Ответов 5
Метки нет (Все метки)

Помогите пожалуйста. Дан массив целых чисел, состоящий из N элементов(N=20). Поменять местами последний элемент с элементом, который ближе всего находится к среднему значению. В программе при обращении к элементу массива нельзя использовать дополнительную переменную для вычисления его адреса.

Программа работает, но нельзя использовать *(p+i), нужна другая адресация на элементы массива. И еще переменные mi и ma должны быть типа fload, чтобы среднее арифметическое высчитывалось точно.



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
#include<stdio.h>
#include<stdlib.h>
#define N 5
int main ()
{
    int a[N],i,j,k,*p=a;
    int mi=100;
    int ma=0;
    for(i=0;i<N;i++)
    scanf("%d",&a[i]);
    for(i=0;i<N;i++)
    {
    ma=ma+(*(p+i));
    }
    ma=ma/N;
    j=0;
    for(i=0;i<N;i++)
    if(ma==*(p+i)||(ma+1)==*(p+i))
    {
    j=i;
    k=*(p+i);
    }
    mi=*(p+N-1);
    *(p+N-1)=k;
    a[j]=mi;
    printf("\n\n");
    for(i=0;i<N;i++)
    printf("%d\t",*(p+i));
    system("pause");
    return 0;
}
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 21:11
Ответы с готовыми решениями:

Поменять местами последний элемент массива с элементом, который ближе всего находится к среднему значению
1.Дан массив целых чисел, состоящий из N элементов(N=20). Поменять местами последний элемент с...

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

Найти элемент массива, который всех ближе по значению к среднему арифметическому
Вычислить среднее арифметическое и найти элемент массива, который всех ближе по значению к средн....

Найти элемент в массиве, который ближе всего по значению к заданному числу
подскажите пожалуйста с основным алгоритмом

5
vua72
418 / 417 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
18.02.2013, 02:06 2
Программа работает, но нельзя использовать *(p+i), нужна другая адресация на элементы массива. И еще переменные mi и ma должны быть типа fload, чтобы среднее арифметическое высчитывалось точно.
ну так вместо *(p+i) используйте a[i], и тип элементов массива тоже сделайте float Правда тогда сравнение на равенство может некорректно работать.
И в цикле вы должны cчитать разницу между значением и средним, причем по модулю, и запоминать номер минимальной дельты.Тут нет места равенству, скорее
C
1
if (delta <(fabs(a[i]-srednee)) {delta=fabs(a[i]-srednee; num_delta=i;}
0
masya_bernovo
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 10
18.02.2013, 18:10 3
a[i] тоже нельзя использовать.программа работает, но написана не так как надо.нельзя использовать дополнительную переменную при обращении к элементу массива при вычислении его адреса
0
vua72
418 / 417 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
18.02.2013, 21:12 4
Цитата Сообщение от masya_bernovo Посмотреть сообщение
a[i] тоже нельзя использовать.программа работает, но написана не так как надо.нельзя использовать дополнительную переменную при обращении к элементу массива при вычислении его адреса
А как вы собираетесь вообще тогда получить доступ к массиву? Массив - это именнованная переменная размером количество элементов на размер одного элемента. Так что, к массиву обращаются по имени а, а вот дополнительной переменной как раз будет указатель р. Вы разберитесь в том, что вам нужно.
0
Kuzia domovenok
2998 / 2546 / 661
Регистрация: 25.03.2012
Сообщений: 9,106
Записей в блоге: 1
Завершенные тесты: 1
18.02.2013, 22:09 5
Цитата Сообщение от vua72 Посмотреть сообщение
А как вы собираетесь вообще тогда получить доступ к массиву? Массив - это именнованная переменная размером количество элементов на размер одного элемента. Так что, к массиву обращаются по имени а, а вот дополнительной переменной как раз будет указатель р. Вы разберитесь в том, что вам нужно.
Очень просто. От него требуется
C
1
2
3
4
int *p=a;
while(...){
  p++;
}
А в записи *(p+i) вообще смысла нет, т.к. это просто другой способ записать p[i]

Не по теме:

вообще в требовании "переделать с указателями" мало смысла. Однако, в случае записи *(p+i), препод видит, что ты заменил шило на мыло. А он хотел, чтобы в программе изменялся указатель.

1
vua72
18.02.2013, 23:14     Указатели: Поменять местами последний элемент с элементом, который ближе всего находится к среднему значению
  #6

Не по теме:

а р - не дополнительная переменная? Чем по сути отличается от a[i]? И то, и другое смещаются относительно адреса a[0]. Там в программе и без этого одни косяки.

0
18.02.2013, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2013, 23:14
Привет! Вот еще темы с ответами:

Поменять местами последний элемент массива с первым элементом, равным x
Заданный массив с n чисел. Поменять местами последний элемент с первым элементом, равным x. Учесть...

Поменять местами последний элемент массива с самым правым максимальным элементом
Поменять местами последний элемент массива с самым правым максимальным элементом, а затем умножить...

Поменять местами последний элемент массива с самым правым максимальным элементом
2. Поменять местами последний элемент массива с самым правым максимальным элементом, а затем...

В одномерном целочисленном массиве поменять местами последний элемент с первым нулевым элементом
Ввести в память машины одномерный целочисленный массив, размерностью не более 50 элементов....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.