8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
1

Работа с массивом через указатели

16.06.2018, 20:52. Показов 2747. Ответов 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<iostream>
#include<ctime>
using namespace std;
 
// even - чётный, odd - нечётный
int average_solver(int *arr, int *size);
void even_odd_counter(int *arr, int *size);
 
void main()
{
    setlocale(0, "rus");
    srand(time(0));
    const int size = 10;
 
    int arr[size][size];
    int *arr_ptr = &arr[size][size];
    int *size_ptr = new int[size];
 
    for (int i = 0; i < *size_ptr; i++)
    {
        *arr_ptr = rand() % 10;
        cout << *arr_ptr << " ";
    }
    cout << endl << endl;
 
    cout << "Среднее арифметическое: " << average_solver(arr_ptr, size_ptr) << endl;
    even_odd_counter(arr_ptr, size_ptr);
 
    system("pause");
}
 
int average_solver(int *arr_ptr, int *size_ptr)
{
    int sum = 0;
 
    for (int i = 0; i < *size_ptr; i++)
        sum += *arr_ptr;
 
    int average = sum / *size_ptr;
    return average;
}
 
void even_odd_counter(int *arr_ptr, int *size_ptr)
{
    unsigned int even_quantity = 0;
    unsigned int odd_quantity = 0;
 
    for (int i = 0; i < *size_ptr; i++)
    {
        if (*arr_ptr % 2 == 0 || *arr_ptr == 2)
            even_quantity++;
        else
            odd_quantity++;
    }
    cout << "Количество чётных чисел: " << even_quantity << endl;
    cout << "Количество нечётных чисел: " << odd_quantity << endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2018, 20:52
Ответы с готовыми решениями:

Работа с массивом через указатели(Определить, строго ли чередуются элементы в массиве)
Задан массив из N элементов, состоящий только из нулей и единиц. Определить, строго ли чередуются...

Помогите переделать работу с массивом через указатели
помогите оформить через указатели...понимаю,что элементарно....но я трамвай for(j=k; j&lt;=N;...

Работа с массивом с через strcpy_s()
Функция addBrackets принимает массив и преобразует его заключая в скобки . т.е. на на вход массив:...

Работа с объектом через указатели
Всем привет, возникла необходимость работы с многочисленными объектами и их структурами - код...

3
186 / 171 / 93
Регистрация: 13.06.2018
Сообщений: 706
16.06.2018, 20:58 2
стр 16,17 о чем?
0
6 / 4 / 3
Регистрация: 28.10.2014
Сообщений: 149
16.06.2018, 21:29 3
https://stepik.org/course/7 советую этот курс сам не понимал указатели и мучался год с ними . После этого курса начал разбираться у Вас видно что с указателями плохо

Добавлено через 6 минут
ещё вопрос: ты знаешь что такое двумерный массив?
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
16.06.2018, 22:42 4
N0VY,
Цитата Сообщение от N0VY Посмотреть сообщение
Написать функцию, которая получает указатель на двумерный массив и его размер
Вы немного не так поняли условие. функция получает двумерный массив (по указателю) и его размер (не по указателю).
Цитата Сообщение от N0VY Посмотреть сообщение
просто скажите, в чём я ошибся
по условию нужно написать функцию (а не функции, т.е одну не считая main), у Вас их две. тип для среднего арифметического - обязательно double иначе часто будет неправильное значение среднего (например для чисел 1,3,4 среднее 2,6666, если будет тип int выдаст 2). через return возвращаем значение среднего, а через параметры, переданные по ссылке - количество чётных и нечётных). код всё же напишу на всякий случай
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <ctime>
using namespace std;
 
double DeltaCountEvenOdd (int** x, int N, int M, int &count_even, int &count_odd)
{
    int sum=0;
    double delta;
    for (int i = 0; i < N; i++)    
    for (int j = 0; j < M; j++)
    {
    sum+=x[i][j];
    if (x[i][j]%2==0) count_even++;
    }
    count_odd=N*M-count_even;   
    delta=(double)sum/(N*M);
    return delta;
}
 
int main()
{
    srand((int)time(0));
    int n, m, count_even=0, count_odd=0;
    cout <<"n="; cin >>n;
    cout <<"m="; cin >>m;
    
      int **a = new int*[n]; 
    for (int i = 0; i < n; i++)
      a[i]=new int[m];
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    {
    a[i][j]=rand()%9 + 1;
    cout <<a[i][j]<<" ";
    }
    cout << endl;
    }
    
    cout <<"delta="<<DeltaCountEvenOdd (a, n, m, count_even, count_odd);
    cout <<"\ncount_even="<<count_even<<"\ncount_odd="<<count_odd<<"\n";
 
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
system("pause");
return 0;
}
0
16.06.2018, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2018, 22:42
Помогаю со студенческими работами здесь

Работа с массивами через указатели
прошу,помогите! нужно написать следующую программу,используя указатели: ввести целочисленный...

Работа со строками через указатели
прошу,помогите! нужно написать следующие программы,используя указатели: 1ЧАСТЬ :::: обьявить 2...

Работа с массивом через пользовательские функции через указатели
Не хочет работать ( Выводит только последний элемент массива ) Help! #include &lt;iostream&gt; using...

Работа с массивом, содержащим указатели на начала строк
Всем доброго времени суток! Вообщем дан массив указателей на строки char *mas = { &quot;AZA&quot;,...


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

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

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