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

Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры) - C++

Восстановить пароль Регистрация
 
MessageToBears
8 / 8 / 1
Регистрация: 05.12.2013
Сообщений: 65
05.02.2014, 18:39     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры) #1
День добрый. В общем не получается у меня запустить эту задачу с помощью указателей:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
int a[100],n,i; float b[100], k,p=0,s;
 
printf("Vvedite n= "); // начало заполнения массива
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("a[%d]= ",i);
scanf("%d",&a[i]);
} // конец заполнения массива
 
for (i=0;i<n;i++) {
p=p+a[i];
s=(p)/(i+1);
b[i]=s;
printf("b[%i]=%.2lf \n",i,b[i]);
}
getch();
}
Программа считает среднее арифметическое чисел, введеных с клавиатуры. Сначала считает среднее первых двух цифр, записывает в массив b, затем трех, и так далее.

Как реализовать программу с указателями? Вот то, что вышло у меня. Помогите найти ошибку:

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 <iostream>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
 
int main()
{
    int *a,n,i;
    float *b, k,p=0,s;
 
    printf("Vvedite n= "); // начало заполнения массива
    scanf("%d",&n);
 
    a=(int*)malloc(n*sizeof(int));
    b=(float*)malloc(n*sizeof(float));
 
    for (i=0; i<n; i++)
    {
        printf("a[%d]= ",i);
        scanf("%d",a+i);
    } // конец заполнения массива
 
    for (i=0; i<n; i++)
    {
        p=p+*a;
        s=(p)/(i+1);
        *b=s;
        printf("b[%i]=%.2lf \n",i,*(b+i));
    }
    free(b);
    free(a);
    getch();
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 18:39     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры)
Посмотрите здесь:

Программа, вычисляющая среднее арифметическое введённой с клавиатуры последовательности чисел C++
C++ Одномерные массивы: Найти среднее арифметическое всех элементов массива
C++ Ввести с клавиатуры 5 дробных чисел и вычислить их среднее арифметическое
Одномерные массивы (найти среднее арифметическое всех элементов массивов) C++
C++ Функция , Указатели , С++ , Задачка (среднее арифметическое все введенных чисел)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
05.02.2014, 18:53     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры) #2
если ты пишешь для плюсов используй new
Цитата Сообщение от MessageToBears Посмотреть сообщение
a=(int*)malloc(n*sizeof(int));
C++
1
a=new int[n];
ну и удаление
C++
1
delete []a;
Цитата Сообщение от MessageToBears Посмотреть сообщение
C++
1
2
3
4
5
for (i=0; i<n; i++)
{
  printf("a[%d]= ",i);
  scanf("%d",a+i);
 }
тебе нужно именно с арифметикой работать
так нельзя?
C++
1
scanf("%d",&a[i]);
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
05.02.2014, 19:02     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если только поправить ошибки, то будет так:
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 <conio.h>
#include <stdio.h>
 
int main()
{
    int *a,n,i;
    float *b, k,p=0,s;
 
    printf("Vvedite n= "); // начало заполнения массива
    scanf("%d",&n);
 
    a=(int*)malloc(n*sizeof(int));
    b=(float*)malloc(n*sizeof(float));
 
    for (i=0; i<n; i++)
    {
        printf("a[%d]= ",i);
        scanf("%d",a+i);
    } // конец заполнения массива
 
    for (i=0; i<n; i++)
    {
        p=p+*(a+i);
        s=(p)/(i+1);
        *(b+i)=s;
        printf("b[%i]=%.2lf \n",i,*(b+i));
    }
    free(b);
    free(a);
    getch();
}
А по хорошему надо так
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 <conio.h>
#include <stdio.h>
 
int main()
{
    int *a,n,i;
    float *b, k,p=0,s;
 
    printf("Vvedite n= "); // начало заполнения массива
    scanf("%d",&n);
 
    a=new int[n];
    b=new int[n];
    int* pa;
    for (pa=a; pa<(a+n); pa++)
    {
        printf("a[%d]= ",i);
        scanf("%d",pa);
    } // конец заполнения массива
 
    for (float* pb=b,pa=a; pb<pb+n; pb++,pa++)
    {
        p=p+*pa;
        s=(p)/(i+1);
        *pb=s;
        printf("b[%i]=%.2lf \n",i,*pb);
    }
    delete[] b;
    delete[] a;
    getch();
}
MessageToBears
8 / 8 / 1
Регистрация: 05.12.2013
Сообщений: 65
05.02.2014, 19:03  [ТС]     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры) #4
На сколько я понимаю, у меня нет проблем с выводом массива на экран или записью

У меня проблема именно с указателями где-то тут:

Код
 for (i=0; i<n; i++)
    {
        p=p+*a;
        s=(p)/(i+1);
        *b=s;
        printf("b[%i]=%.2lf \n",i,*(b+i));
    }
Программа считает коряво.
Валериус, спасибо, но это не исправляет проблему.


Спасибо, ребят!
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
05.02.2014, 19:12     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры) #5
Цитата Сообщение от MessageToBears Посмотреть сообщение
спасибо, но это не исправляет проблему.
так ты озвучь проблему то
тебе среднеарифметическое всего массива или
Цитата Сообщение от MessageToBears Посмотреть сообщение
Сначала считает среднее первых двух цифр, записывает в массив b, затем трех, и так далее.
если второе то у тебя и первое решение не правильно
сначала просто копирует первый элемент
и так и не ответил тебе нужна именно адресная арифметика
типа
Цитата Сообщение от MessageToBears Посмотреть сообщение
b+i
кстати заметь что ты не изменяешь указатель в цикле типа, b++, а тупо пишешь все по одному адресу
или можно так b[i]
с указателями можно работать как с массивами

Не по теме:

для выделения кода используй тег С++



Добавлено через 1 минуту
Цитата Сообщение от MessageToBears Посмотреть сообщение
*b=s;
попробуй так
C++
1
*(b+i)=s;
впрочем, zss, уже показал
Yandex
Объявления
05.02.2014, 19:12     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры)
Ответ Создать тему
Опции темы

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