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

найдите ошибку - C++

Восстановить пароль Регистрация
 
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:04     найдите ошибку #1
Составить функцию, которая, получив число А и массив из N целых чисел, анализирует массив. Если сумма всех элементов массива отрицательна, то функция формирует новый массив, поместив в него те элементы исходного массива, которые не делятся на число А. Если сумма всех элементов исходного массива положительна, то результирующий массив не формируется
Написал функцию анализа но гдето ошибка помогите
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool analiz(int* mas, int* newmas, int n, int A)
{   int s=0;
    int i;
    for(i=0; i<n; i++)
    {
       s+=mas[i];
    }
        if(s<0)
        {
            for(i=0;i<n;i++)
            {
                if(mas[i]%A!=0)
                newmas[i]=mas[i];
            }
        
        return true;
        }
        else return false;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2010, 14:04     найдите ошибку
Посмотрите здесь:

C++ Найдите ошибку!
Найдите ошибку C++
найдите ошибку C++
C++ Найдите ошибку
найдите ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
13.01.2010, 14:11     найдите ошибку #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool analiz(int* mas, int* newmas, int n, int A)
{   int s=0;
        int i;
        for(i=0; i<n; i++)
        {
           s+=mas[i];
        }
                if(s<0)
                {       int j=0;
                        for(i=0;i<n;i++)
                        {
                                if(mas[i]%A!=0)
                        { 
                        newmas[j]=mas[i];
                        j++;
                        }
                        }
                
                return true;
                }
                else return false;
}
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:13  [ТС]     найдите ошибку #3
да все верно почти но только она выводит еще огромное отрицательное число за место тех чисел которые в новый массив не вошли
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
13.01.2010, 14:17     найдите ошибку #4
Цитата Сообщение от Chefer Посмотреть сообщение
да все верно почти но только она выводит еще огромное отрицательное число за место тех чисел которые в новый массив не вошли
так и будет потому что у тебя на этих местах хлам хранится, что бы выводило просто нули надо тогда написать newmas[100]={0}
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:23  [ТС]     найдите ошибку #5
а можно создать newьфы без хлама? перед вычислением суммы например. надо чтобы без нулей и без хлама было

Добавлено через 2 минуты
*newmas
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
13.01.2010, 14:24     найдите ошибку #6
да можно вот так попробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int analiz(int* mas, int* newmas, int n, int A)
{   int s=0;
        int i;
        int j=-1;
        for(i=0; i<n; i++)
        {
           s+=mas[i];
        }
                if(s<0)
                {       
                        for(i=0;i<n;i++)
                        {
                                if(mas[i]%A!=0)
                        { 
                        j++;
                        newmas[j]=mas[i];                  
                        }
                        }
                
                return j;
                }
                else return j;
а вывод нового массива тогда надо сделать вот так
C++
1
2
3
4
5
if(j>=0)
{
for(int i=0;i<=j;i++)
cout<<newmas[i]<<" ";
}
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:26  [ТС]     найдите ошибку #7
мне можно только bool возвращать. именно в этом файле надо массив создать
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
13.01.2010, 14:29     найдите ошибку #8
выложи всю прогу

Добавлено через 1 минуту
Цитата Сообщение от Chefer Посмотреть сообщение
мне можно только bool возвращать. именно в этом файле надо массив создать
а выводить его где???
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:31  [ТС]     найдите ошибку #9
функция вывода:
C++
1
2
3
4
5
6
#include <iostream>
using namespace std;
void vivod(int* mas, int n)
{
    for(int i=0; i<n; i++) cout<<mas[i];
}
Добавлено через 22 секунды
функция ввода
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
void vvod(int* mas, int n)
{    
    for(int i=0; i<n; i++) 
    {
        cout <<"vvedite " <<i+1 <<" element masssiva";
            cin >>mas[i];
    }
}
Добавлено через 28 секунд
функция main
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>
#define N 100
using namespace std;
void vvod(int* mas, int n);
void vivod(int* mas, int n);
bool analiz(int* mas, int* newmas, int n, int A);
void main()
 
{   int A;
    char answer;
    int mas[N];
    int newmas[N];
    int n=0;
    do{
        cout <<"vvedite kol-vo ellementov massiva: ";
        cin >>n;
        cout <<"vvedite A: ";
        cin >>A;
 
        vvod(mas,n);
        if(analiz(mas,newmas,n,A))
        {
            cout <<"new mas: ";
            vivod(newmas,n);
        }
        else
        {
            cout <<"nelza sozdat";
        }
        cout <<"Again?(y/n)"<<endl;
        cin >>answer;
    }while(answer!='y');
}
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
13.01.2010, 14:31     найдите ошибку #10
а можно вот так сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool analiz(int* mas, int* newmas, int n, int A)
{   int s=0;
        int i;
        for(i=0; i<n; i++)
        {
           s+=mas[i];
        }
                if(s<0)
                {       int j=0;
                        for(i=0;i<n;i++)
                        {
                                if(mas[i]%A!=0)
                        { 
                        newmas[j]=mas[i];
                        j++;
                        }
                       
                       }
                n=j-1; 
                return true;
                }
                else return false;
вот это тебе скорее всего подойдет
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:37  [ТС]     найдите ошибку #11
неа все равно не пашет. ппц
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
13.01.2010, 14:41     найдите ошибку #12
я там немного накосячил со строкой n=j-1; ее надо чуть ниже поставить перед return true; посмотри я в коде уже исправил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2010, 14:49     найдите ошибку
Еще ссылки по теме:

C++ Найдите ошибку
C++ Найдите ошибку...
C++ Найдите ошибку

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

Или воспользуйтесь поиском по форуму:
Chefer
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 24
13.01.2010, 14:49  [ТС]     найдите ошибку #13
выводит цифры лишние все равно

Добавлено через 5 минут
все равно. у меня не пашет))
Yandex
Объявления
13.01.2010, 14:49     найдите ошибку
Ответ Создать тему
Опции темы

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