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

Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
27.01.2013, 10:54     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #1
Помогите, пожалуйста, с задачей. Сложность - работа с указателями..

Задача: Вычислить разность между количеством отрицательных и количеством положительных элементов массива. Использовать функцию для каждой строки матрицы Р (4, 14).
Примечание:
[создать функцию, параметром которой является одномерный массив и его размерность. Тело функции реализовать двумя способами: через обращение к элементам массива через указатели и обычным способом. Продемонстрировать возможность применения созданной функции к строкам двумерного массива. Элементы матрицы задать случайным образом, не забыв вывести их на экран.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2013, 10:54     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов
Посмотрите здесь:

Массив (одномерный и двумерный, поиск локальных максимумов и кол-ва положительных и отрицательных элементов) C++
C++ Дан одномерный массив состоящий из N целочисленных элементов. Вычислить сумму положительных элементов массива кратных 3
C++ Одномерный массив из вещестенных чисел: вычислить сумму положительных элементов
Найти разность количества положительных и отрицательных элементов C++
C++ Найти разницу между количеством положительных и отрицательных элементов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
27.01.2013, 22:09     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #2
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
#include <iostream>
#include <iomanip> //setw
#include <cstdlib> // rand
#include <ctime> // time
using namespace std;
 
int sumPos(int a[], int size);
int sumNeg(int *a, int size);
int main() {
    const int N = 4;
    const int M = 14;
    int matr[N][M];
    srand(time(NULL));
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            matr[i][j] = rand() % 100 - 50;
            cout << setw(5) << matr[i][j];
        }
        cout << endl;
    }
    int sumOfPos = 0;
    int sumOfNeg = 0;
    for (int i = 0; i < N; ++i) {
        sumOfPos += sumPos(&matr[i][0], M);
        sumOfNeg += sumNeg(&matr[i][0], M);
    }
    cout << "\nSumma polojitelnyx=" << sumOfPos;
    cout << "\nSumma otrizatelnyx=" << sumOfNeg;
    return 0;
}
 
int sumPos(int a[], int size) {
    int tmpSum = 0;
    for (int i = 0; i < size; ++i)
        if (a[i] > 0)
            tmpSum += a[i];
    return tmpSum;
}
 
int sumNeg(int *a, int size) {
    int tmpSum = 0;
    for (int i = 0; i < size; ++i)
        if (*(a + i) < 0)
            tmpSum += *(a + i);
    return tmpSum;
}
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
28.01.2013, 13:08  [ТС]     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #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
58
59
60
61
62
63
64
65
66
67
68
69
#include<iostream>
#include<math.h>
#include<time.h>
#include<iomanip>
using namespace std;
 
int otr_pol(int *ar, int size)   // обычным способом
    {
     int pol1=0,otric1=0;
     for(int i=0;i<size;i++)
         {
         if (*(ar+i)>0) pol1++;
         if (*(ar+i)<0) otric1++;
         
         }
     cout<<endl<<"Otritcatelnyh elementov: "<<otric1<<endl;
     cout<<"Polozhitelnyh elementov: "<<pol1<<endl;  
     int raznost=otric1-pol1;    
     }
     
int otr__pol(int ar[], int size)    // через указатели
    {
     int pol2=0,otric2=0;
     for(int i=0;i<size;i++)
         {
         if (ar[i]>0) pol2++;
         if (ar[i]<0) otric2++;
         
         }
     cout<<endl<<"Otritcatelnyh elementov: "<<otric2<<endl;
     cout<<"Polozhitelnkh elementov: "<<pol2<<endl;  
     int raznost=otric2-pol2;    
     }
     
int main()
{
srand((unsigned)time(NULL));
int N=10;
int array[N];
cout<<"***** ODNOMERNYI MASSIV *****"<<endl;
for (int i=0; i<N; i++)
    {
     array[i]=(rand()%100-30);  
     cout<<array[i]<<"  ";  
    }
cout<<"Raznost mezhdu kol-vom otritcat. i polozhit. el-tov massiva (OBYCHNYM SPOSOBOM) "<<otr_pol(array, N)<<endl;
cout<<"Raznost mezhdu kol-vom otritcat. i polozhit. el-tov massiva (CHEREZ UKAZATELI) "<<otr__pol(array, N)<<endl;
cout<<endl<<"***************************************************************************"<<endl<<endl<<endl;
 
 
cout<<"***** DVUMERNYI MASSIV *****"<<endl;
int M=4;
N=14;
int array2[M][N];
for (int i=0;i<M;i++)
    {for (int j=0;j<N;j++)
         {array2[i][j]=(rand()%100-30);
         cout << setw(5) << array2[i][j];
         }
    cout<<endl; 
    }
 
for (int i=0;i<M;i++)
    {cout<<i<<"-ia stroka:"<<endl;
    cout<<"Raznost mezhdu kol-vom otritcat. i polozhit. el-tov massiva (OBYCHNYM SPOSOBOM) "<<otr_pol(&array[i], N)<<endl;
    cout<<endl;
    }
system("PAUSE");
}
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
28.01.2013, 14:32     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #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
24
25
26
#include<iostream>
const int M=4;
void f(int (*a1)[M],int size);
 
 
int main()
{
int a[M][M]={{0,1,2,3},{4,-5,-6,7},{8,9,10,11},{12,13,14,15}};
f(a,4);
std::cin.get();
std::cin.get();
 
    return 0;
}
void f(int ((*a1)[M]),int size)
{int min=0; int plus=0; int sum=0;
for(int i=0;i<size;i++){
for(int j=0;j<M;j++){
if(*(*(a1+i)+j)<0)
min++;
if(*(*(a1+i)+j)>0)
plus++;}
sum=-min+plus;
std::cout<<sum<<'\n';
min=0; plus=0;sum=0;
}}
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
28.01.2013, 14:42  [ТС]     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #5
Цитата Сообщение от Valli1 Посмотреть сообщение
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
#include<iostream>
const int M=4;
void f(int (*a1)[M],int size);
 
 
int main()
{
int a[M][M]={{0,1,2,3},{4,-5,-6,7},{8,9,10,11},{12,13,14,15}};
f(a,4);
std::cin.get();
std::cin.get();
 
    return 0;
}
void f(int ((*a1)[M]),int size)
{int min=0; int plus=0; int sum=0;
for(int i=0;i<size;i++){
for(int j=0;j<M;j++){
if(*(*(a1+i)+j)<0)
min++;
if(*(*(a1+i)+j)>0)
plus++;}
sum=-min+plus;
std::cout<<sum<<'\n';
min=0; plus=0;sum=0;
}}
Большое спасибо, но я хотела бы всё-таки найти ошибку в моей программе.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
28.01.2013, 17:43     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #6
Смотрите, с точки зрения Си - двумерный массив можно рассматривать как одномерный, тогда
работать с ним нужно подобно следующему коду
C++
1
int *pArray=&matriza[0][0]
и цикл перебирать от 0 до N*M, при этом доступ к элементу pArray[i] или *(pArray+i);
Можно и традиционно, через вложенные циклы, при этом, доступ к элементу массива, будет
pArray[i*число_элементов с троке+j], если i-счетчик строк, j-счетчик столбцов

Добавлено через 5 минут
Что вы этим
C++
1
int raznost=otric1-pol1;
хотели сделать в конце кода?
1. Если вы хотели считать отрицательнеые и положительные в теле функции и из нее делать печать, то
C++
1
cout<<"Raznost mezhdu kol-vom otritcat. i polozhit. el-tov massiva (OBYCHNYM SPOSOBOM) "<<otr_pol(array, N)<<endl;
бессмысленно, так ак ваша функция не возвращает результата, по крайней мере того, на который вы рассчитвываете, поэтому вмето
C++
1
int raznost=otric2-pol2;
нужно вставить
C++
1
return=abs(otric2-pol2);
Добавлено через 1 минуту
2. В комментариях вы попутали способы доступа к элементу массива, там с точностью до наоборот.

Добавлено через 4 минуты
3. Зачем вы два раза генерируете массив, достаточного одного раза.
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
28.01.2013, 17:48  [ТС]     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #7
Цитата Сообщение от vua72 Посмотреть сообщение

Что вы этим
C++
1
int raznost=otric1-pol1;
хотели сделать в конце кода?
ну по условию задачи, я так полагаю, необходимо посчитать количество отрицательных элементов, количество положительных элементов и найти их разность.. Дурацкая задача, но что поделать. А насчет перепутала с точностью да наоборот - это как? одномерный массив просчитывает без проблем, а с двумерным не смогли бы прописать прямооо... Я просто зациклилась в каком то русле и не пойму, где ошибка происходит....

Добавлено через 3 минуты
Цитата Сообщение от vua72 Посмотреть сообщение

3. Зачем вы два раза генерируете массив, достаточного одного раза.
ну там нужен двумерный массив, дабы продемонстрировать правильность работы на его строках
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
28.01.2013, 18:12     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #8
Смотрите, я переделал свой пример, а вы по аналогии переделайте свою функцию

Добавлено через 16 секунд
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
#include <iostream>
#include <iomanip> //setw
#include <cstdlib> // rand
#include <ctime> // time
using namespace std;
 
int kolPos(int a[], int size);
int kolNeg(int *a, int size);
int main() {
    const int N = 4;
    const int M = 14;
    int matr[N][M];
    srand(time(NULL));
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            matr[i][j] = rand() % 100 - 50;
            cout << setw(5) << matr[i][j];
        }
        cout << endl;
    }
    // рассчет по строкам
    int raznost=0;
    for (int i = 0; i < N; ++i) {
        raznost +=kolPos(&matr[i][0], M)-kolNeg(&matr[i][0], M);
    }
    cout << "\nRaznost = " << abs(raznost);
    // для вмей матрицы
    cout << "\nRaznost = " << abs(kolPos(&matr[0][0], N*M)-kolNeg(&matr[0][0], N*M));
    return 0;
}
 
int kolPos(int a[], int size) {
    int tmpSum = 0;
    for (int i = 0; i < size; ++i)
        if (a[i] > 0)
            tmpSum ++;
    return tmpSum;
}
 
int kolNeg(int *a, int size) {
    int tmpSum = 0;
    for (int i = 0; i < size; ++i)
        if (*(a + i) < 0) // указатели
            tmpSum ++;
    return tmpSum;
}
Добавлено через 4 минуты
Цитата Сообщение от kristina-lonsh Посмотреть сообщение
ну по условию задачи, я так полагаю, необходимо посчитать количество отрицательных элементов, количество положительных элементов и найти их разность.. Дурацкая задача, но что поделать. А насчет перепутала с точностью да наоборот - это как? одномерный массив просчитывает без проблем, а с двумерным не смогли бы прописать прямооо... Я просто зациклилась в каком то русле и не пойму, где ошибка происходит....

Добавлено через 3 минуты


ну там нужен двумерный массив, дабы продемонстрировать правильность работы на его строках
Задача: Вычислить разность между количеством отрицательных и количеством положительных элементов массива. Использовать функцию для каждой строки матрицы Р (4, 14).
Примечание: [создать функцию, параметром которой является одномерный массив и его размерность. Тело функции реализовать двумя способами: через обращение к элементам массива через указатели и обычным способом. Продемонстрировать возможность применения созданной функции к строкам двумерного массива. Элементы матрицы задать случайным образом, не забыв вывести их на экран.
У вас задан двумерный массив изначально, вы его обрабатываете по строкам, а потом обрабатываете массив целиком как дномерный

Добавлено через 6 минут
Заменить
C++
1
raznost +=kolPos(&matr[i][0], M)-kolNeg(&matr[i][0], M)
;
на
C++
1
raznost +=abs(kolPos(&matr[i][0], M)-kolNeg(&matr[i][0], M));
Добавлено через 2 минуты
Valli1, ваш код нечитаем, что вам мешает в среде разработки его отформатировать?

Добавлено через 55 секунд

Не по теме:

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
#include<iostream>
const int M=4;
void f(int (*a1)[M],int size);
 
 
#include<iostream>
const int M = 4;
void f(int (*a1)[M], int size);
 
int main() {
    int a[M][M] = { { 0, 1, 2, 3 }, { 4, -5, -6, 7 }, { 8, 9, 10, 11 }, { 12,
            13, 14, 15 } };
    f(a, 4);
    std::cin.get();
    std::cin.get();
 
    return 0;
}
void f(int ((*a1)[M]), int size) {
    int min = 0;
    int plus = 0;
    int sum = 0;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < M; j++) {
            if (*(*(a1 + i) + j) < 0)
                min++;
            if (*(*(a1 + i) + j) > 0)
                plus++;
        }
        sum = -min + plus;
        std::cout << sum << '\n';
        min = 0;
        plus = 0;
        sum = 0;
    }
}

kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
28.01.2013, 18:13  [ТС]     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #9
Цитата Сообщение от vua72 Посмотреть сообщение
Смотрите, я переделал свой пример, а вы по аналогии переделайте свою функцию

Добавлено через 16 секунд
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
#include <iostream>
#include <iomanip> //setw
#include <cstdlib> // rand
#include <ctime> // time
using namespace std;
 
int kolPos(int a[], int size);
int kolNeg(int *a, int size);
int main() {
    const int N = 4;
    const int M = 14;
    int matr[N][M];
    srand(time(NULL));
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            matr[i][j] = rand() % 100 - 50;
            cout << setw(5) << matr[i][j];
        }
        cout << endl;
    }
    // рассчет по строкам
    int raznost=0;
    for (int i = 0; i < N; ++i) {
        raznost +=kolPos(&matr[i][0], M)-kolNeg(&matr[i][0], M);
    }
    cout << "\nRaznost = " << abs(raznost);
    // для вмей матрицы
    cout << "\nRaznost = " << abs(kolPos(&matr[0][0], N*M)-kolNeg(&matr[0][0], N*M));
    return 0;
}
 
int kolPos(int a[], int size) {
    int tmpSum = 0;
    for (int i = 0; i < size; ++i)
        if (a[i] > 0)
            tmpSum ++;
    return tmpSum;
}
 
int kolNeg(int *a, int size) {
    int tmpSum = 0;
    for (int i = 0; i < size; ++i)
        if (*(a + i) < 0) // указатели
            tmpSum ++;
    return tmpSum;
}
Добавлено через 4 минуты



У вас задан двумерный массив изначально, вы его обрабатываете по строкам, а потом обрабатываете массив целиком как дномерный
ну, возможно, Вы правы и проверка на одномерном массиве не нужна. Но вы считаете, что количество положительных и количество отрицательных элементов должны рассчитывать разные функции?? я думаю по контексту задачи прослеживается одна функция, результатом которой будет разность (число).
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
28.01.2013, 18:15     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #10
kristina-lonsh, считайте в одной, я вам пример привел, вы делайте так как вам нужно, исправьте свою функцию.

Не по теме:

И хоть немножео псомтрите как работает пример, который вам привели, и разберитесь с указателями

Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
29.01.2013, 01:20     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #11
Valli1, ваш код нечитаем, что вам мешает в среде разработки его отформатировать?
Я его в Visual 2008 делал, все читает и выводит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 02:20     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов
Еще ссылки по теме:

Вычислить разность между количеством отрицательных и количеством положительных элементов одномерного массива C++
C++ Одномерный массив - вычислить сумму отрицательных элементов массива
C++ Одномерный массив, подсчитать число положительных, отрицательных и нулевых элементов

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

Или воспользуйтесь поиском по форуму:
Twitosha
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 29
17.09.2013, 02:20     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов #12
автор темы. у тебя остался код программы, этой, переделанной? если да, буду очень признательна тебе, если ты выложишь код сюда.
Yandex
Объявления
17.09.2013, 02:20     Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов
Ответ Создать тему
Опции темы

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