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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
#1

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

27.01.2013, 10:54. Просмотров 1870. Ответов 11
Метки нет (Все метки)

Помогите, пожалуйста, с задачей. Сложность - работа с указателями..

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

Вычислить разность между количеством отрицательных и количеством положительных элементов одномерного массива - C++
Здравствуйте уважаемые форумчане. Возникли трудности при решении задачи. :wall: Буду очень признателен тем, кто поможет и не останется...

Найти разницу между количеством положительных и отрицательных элементов - C++
Помогите решить пожалуйста, на языке Си 15. Дан массив размера N. Найти разницу между количеством положительных и отрицательных...

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

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

Массив (одномерный и двумерный, поиск локальных максимумов и кол-ва положительных и отрицательных элементов) - C++
Две задачи, которые нужно реализовать на c++ в борланде. Вот первая (по одномерному массиву): В массиве А(n) найти и напечатать номера...

Одномерный массив - вычислить сумму отрицательных элементов массива - C++
В одномерном массиве из N вещественных элементов, вычислить: • сумму отрицательных элементов массива; • произведение элементов...

11
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
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;
}
0
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");
}
0
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;
}}
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;
}}
Большое спасибо, но я хотела бы всё-таки найти ошибку в моей программе.
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
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. Зачем вы два раза генерируете массив, достаточного одного раза.
0
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. Зачем вы два раза генерируете массив, достаточного одного раза.
ну там нужен двумерный массив, дабы продемонстрировать правильность работы на его строках
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
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;
    }
}

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 минуты



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

Не по теме:

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

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

Дан одномерный массив состоящий из N целочисленных элементов. Вычислить сумму положительных элементов массива кратных 3 - C++
если не сложно помогите 1)дана функция y=0.5+sin(5x), причем х изменяется от 0 до 2pi с шагом x=pi/6!(программа не выводит результата...

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

Найти разность количества положительных и отрицательных элементов - C++
Помогите, пожалуйста. Нужно переделать вторую часть, где идет работа с заданием 2. Там выполняется сумма отрицательных элементов. А мне...

Функция должна вычислять разницы между суммой положительных элементов массива и суммой модулей отрицательных элементов массива - C++
Разработать функцию ,обрабатывающую массив и вычисляющую две величины.Кроме того,разработать две функции,которые вычисляют те же самые...


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

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

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