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

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

Войти
Регистрация
Восстановить пароль
 
MessageToBears
9 / 9 / 1
Регистрация: 05.12.2013
Сообщений: 65
#1

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

05.02.2014, 18:39. Просмотров 475. Ответов 4
Метки нет (Все метки)

День добрый. В общем не получается у меня запустить эту задачу с помощью указателей:

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++ Найти среднее арифметическое всех элементов массива введенных с клавиатуры
C++ Одномерные массивы: Найти среднее арифметическое всех элементов массива
Одномерные массивы (найти среднее арифметическое всех элементов массивов) C++
C++ Вывести среднее арифметическое 10-ти подряд введенных чисел. C++
Указатели. Из трех введенных с клавиатуры чисел преподнести в квадрат отрицательние а положительные оставити без изменений C++
C++ Ввести последовательность, показать количество введенных чисел, их общую сумму и среднее арифметическое
C++ Массивы. Найти среднее арифметическое отрицательных чисел и подсчитать количество чисел, входящих в диапазон
Среднее арифметическое вводимой с клавиатуры последовательности дробных чисел C++
C++ Ввести с клавиатуры 5 дробных чисел и вычислить их среднее арифметическое
Программа, вычисляющая среднее арифметическое введённой с клавиатуры последовательности чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6540 / 5006 / 461
Регистрация: 14.02.2011
Сообщений: 16,649
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
Модератор
Эксперт С++
6282 / 5885 / 1906
Регистрация: 18.12.2011
Сообщений: 15,096
Завершенные тесты: 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
9 / 9 / 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
Модератор
6540 / 5006 / 461
Регистрация: 14.02.2011
Сообщений: 16,649
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     Одномерные массивы + указатели (среднее арифметическое чисел, введенных с клавиатуры)
Ответ Создать тему
Опции темы

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