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

Определить количество положительных элементов массива, предшествующих первому отрицательному - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
05.10.2010, 11:48     Определить количество положительных элементов массива, предшествующих первому отрицательному #1
Определить количество положительных элементов массива, предшествующих первому отрицательному.
Помогите пожалуйста решить данную задачу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2010, 11:48     Определить количество положительных элементов массива, предшествующих первому отрицательному
Посмотрите здесь:

В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю. C++
Определить количество положительных элементов массива, предшествующих первому отрицательному C++
Записать положительные элементы массива X подряд в массив Y. Определить k – количество положительных элементов. Вычислит сумму элементов массива Y C++
Найти среднее арифметическое отрицательных элементов массива, предшествующих первому положительному элементу; проверить, упорядочены ли элементы по во C++
Определить количество положительных и количество отрицательных элементов массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.10.2010, 12:45     Определить количество положительных элементов массива, предшествующих первому отрицательному #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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <algorithm>
#include <iterator>
 
bool less0(int num) { return num < 0; }
bool greater0(int num) { return num > 0; }
 
int main(){
    const int SIZE = 5;
    int a[SIZE] = { 0, 2, 3, -5, -9 };
    int b[SIZE] = { -1, 2, 3, -2, 1 };
    int c[SIZE] = { 1, 2, 3, 4, 5 };
    int d[SIZE] = { 1, 2, -1, -2, 0 };
    int cnt;
 
    std::cout << "Array A: ";
    std::copy(a, a + SIZE, std::ostream_iterator<int>(std::cout, " "));
    cnt = std::distance(a, std::find_if(a, a + SIZE, less0));
    switch ( cnt ) {
    case 0:
        std::cout << "  : No elements before first negative" << std::endl;
        break;
    case SIZE:
        std::cout << "  : All elements are positive" << std::endl;
        break;
    default:
        std::cout << "  : " << std::count_if(a, a + cnt, greater0) << " positive elements before first negative" << std::endl;
        break;
    }
 
    std::cout << "Array B: ";
    std::copy(b, b + SIZE, std::ostream_iterator<int>(std::cout, " "));
    cnt = std::distance(b, std::find_if(b, b + SIZE, less0));
    switch ( cnt ) {
    case 0:
        std::cout << "  : No elements before first negative" << std::endl;
        break;
    case SIZE:
        std::cout << "  : All elements are positive" << std::endl;
        break;
    default:
        std::cout << "  : " << std::count_if(b, b + cnt, greater0) << " positive elements before first negative" << std::endl;
        break;
    }
 
    std::cout << "Array C: ";
    std::copy(c, c + SIZE, std::ostream_iterator<int>(std::cout, " "));
    cnt = std::distance(c, std::find_if(c, c + SIZE, less0));
    switch ( cnt ) {
    case 0:
        std::cout << "  : No elements before first negative" << std::endl;
        break;
    case SIZE:
        std::cout << "  : All elements are positive" << std::endl;
        break;
    default:
        std::cout << "  : " << std::count_if(c, c + cnt, greater0) << " positive elements before first negative" << std::endl;
        break;
    }
 
    std::cout << "Array D: ";
    std::copy(d, d + SIZE, std::ostream_iterator<int>(std::cout, " "));
    cnt = std::distance(d, std::find_if(d, d + SIZE, less0));
    switch ( cnt ) {
    case 0:
        std::cout << "  : No elements before first negative" << std::endl;
        break;
    case SIZE:
        std::cout << "  : All elements are positive" << std::endl;
        break;
    default:
        std::cout << "  : " << std::count_if(d, d + cnt, greater0) << " positive elements before first negative" << std::endl;
        break;
    }
 
    return 0;
}
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
05.10.2010, 13:00  [ТС]     Определить количество положительных элементов массива, предшествующих первому отрицательному #3
Программа "[7120] 11.exe: Машинный код" завершилась с кодом 0 (0x0).

При компиляции выскакивает окошко, закрывается пишет это...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.10.2010, 13:32     Определить количество положительных элементов массива, предшествующих первому отрицательному #4
Цитата Сообщение от wertrix Посмотреть сообщение
Программа "[7120] 11.exe: Машинный код" завершилась с кодом 0 (0x0).
Замечательно просто она завершилась! Были бы ошибки - был бы код возврата отличный от нуля.

Цитата Сообщение от wertrix Посмотреть сообщение
При компиляции выскакивает окошко, закрывается пишет это...
вот это прочитайте создаю исполняемый файл запускаю окно появляется на доли секунды и изчезает
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
05.10.2010, 13:42  [ТС]     Определить количество положительных элементов массива, предшествующих первому отрицательному #5
Конечно, огромное вам спасибо за проделанную работу, но мне надо простенькую программку, у нас только начали изучать массивы, и мы их делали через
C++
1
2
3
4
5
6
7
8
9
const int N1=100;
int A[N1];
int n,i=0;
printf("vvedite razmer massiva:");
scanf(%d",&n);
for (i=0; i<n; i++)
{printf("vvedite element massiva");
scanf("%d",&A[i]);
}
Мы так их вводили, и мне надо было чтобы решение было примерно таким же ;-).
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
05.10.2010, 13:59     Определить количество положительных элементов массива, предшествующих первому отрицательному #6
По простому:
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
const int SIZE=100;
int A[SIZE];
 
int n,i,k=0;
printf("vvedite razmer massiva: ",i);
scanf("%d",&n);
for (i=0; i<n; i++)
{
    printf("vvedite %d element massiva: ",i);
    scanf("%d",&A[i]);
}
 
for (i=0; i<n; i++)
{
    if(A[i]>0)
        k++;
    else if(A[i]<0)
        break;
}
 
printf("Kolvo = %d",k);
/////
getch();
return 0;
}
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
05.10.2010, 14:04  [ТС]     Определить количество положительных элементов массива, предшествующих первому отрицательному #7
Спасибо вам всем огромное
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.10.2010, 14:05     Определить количество положительных элементов массива, предшествующих первому отрицательному #8
Цитата Сообщение от wertrix Посмотреть сообщение
const int N1=100;
и не лень было по 100 элементов каждый раз вводить?
Цитата Сообщение от wertrix Посмотреть сообщение
Мы так их вводили, и мне надо было чтобы решение было примерно таким же
А вам не объясняли, почему плохо смешивать С и С++ код в одной программе? В прочем не Вы первый, кого вот такому гибридному языку учат. Вот Вам на С то же задание
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
#include <stdio.h>
#include <stdlib.h>
 
int main(void){
    int * arr, size, i, j, cnt;
 
    printf("Number of elements: ");
    scanf("%d", &size);
    if ( ( arr = (int*)malloc(sizeof(int) * size) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    for ( i = 0; i < size; ++i ){
        printf("Array[%d] = ", i);
        scanf("%d", &arr[i]);
    }
 
    for ( i = 0; i < size; ++i )
        if ( arr[i] < 0 )
            break;
    if ( i == 0 ){
        printf("Array starts from negative element\n");
    }
    else if ( i == size ){
        printf("No negative elements found in array\n");
    }
    else {
        for ( cnt = j = 0; j < i; ++j )
            if ( arr[j] > 0 )
                ++cnt;
        printf("%d positive elements before first negative\n", cnt);
    }
 
    free(arr);
    system("pause");
    exit(0);
}
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
05.10.2010, 14:52  [ТС]     Определить количество положительных элементов массива, предшествующих первому отрицательному #9
Спасибо еще раз.

Цитата Сообщение от easybudda Посмотреть сообщение
А вам не объясняли, почему плохо смешивать С и С++ код в одной программе? В прочем не Вы первый, кого вот такому гибридному языку учат. Вот Вам на С то же задание
Я даже не подозревал, что такому могут учить. Вы можете сказать, в чем недостатки смешивания С и С++ кода в одной программе?
yariknarik
0 / 3 / 0
Регистрация: 02.06.2010
Сообщений: 36
05.10.2010, 15:10     Определить количество положительных элементов массива, предшествующих первому отрицательному #10
компилятор может тупить, некоторые команды существующте в С неупотребляются в С++, кроме того в С нет классов, если прога маленькая, это не создает много проблем, а в больших прогах потом очень трудно найти ошибки... компилятор не всегда их показывает.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.10.2010, 15:33     Определить количество положительных элементов массива, предшествующих первому отрицательному #11
Цитата Сообщение от yariknarik Посмотреть сообщение
компилятор может тупить, некоторые команды существующте в С неупотребляются в С++, кроме того в С нет классов, если прога маленькая, это не создает много проблем, а в больших прогах потом очень трудно найти ошибки... компилятор не всегда их показывает.
Цитата Сообщение от wertrix Посмотреть сообщение
Вы можете сказать, в чем недостатки смешивания С и С++ кода в одной программе?
Ну в общих чертах Вам ответили. Конкретнее - коль скоро С++ объектно ориентированный язык программирования, то и потоки ввода/вывода в нём представлены объектами соответствующих классов ( cin - объект класса istream, cout - ostream ), С в стиле UNIX воспринимает stdin, как файл, открытый для чтения, stdout - как файл, открытый для записи. Если смешивать оба подхода в одной программе - получится, что для одного и того же потока используются разные буферы и часть ввода/вывода может просто теряться. К тому же обработка ошибок (в том числе и ввода/вывода) в С и С++ организована по-разному. Вот к примеру програмка, читающая с консоли число, в случае ошибки ввода присваивающая числу значение по умолчанию и выводящая число обратно на консоль
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main(void){
    int number;
 
    printf("Enter some number: ");
    if ( scanf("%d", &number) != 1 ){
        fprintf(stderr, "Wrong input! Setting number to default value - 0\n");
        number = 0;
    }
 
    printf("The number is %d\n", number);
 
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
int main(){
    int number;
 
    std::cin.exceptions(std::cin.failbit);
    std::cout << "Enter some number: ";
    try {
        std::cin >> number;
    }
    catch ( std::ios_base::failure & ){
        std::cerr << "Wrong input, setting number to default value - 0" << std::endl;
        number = 0;
    }
 
    std::cout << "The number is " << number << std::endl;
 
    return 0;
}
В таком простом примере, конечно, без разницы - и так работает, и эдак, а вот когда встанет вопрос, как бы это вывести поля класса (к примеру), прийдётся задуматься... То ли пытаться printf() перегружать , то ли переделывать вывод так, как он в С++ задуман, а переучиваться всегда сложнее...

Добавлено через 1 минуту
а уж как до динамической памяти дело доходит, за использование malloc()/free() вперемешку с new/delete можно сразу конечности отрывать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2010, 15:47     Определить количество положительных элементов массива, предшествующих первому отрицательному
Еще ссылки по теме:

C++ Произведение отрицательных элементов массива, предшествующих первому положительному элементу
C++ Найти сумму и количество положительных элементов, предшествующих первому нулевому элементу массива
C++ Определить количество пробелов среди символов, предшествующих первому восклицательному знаку

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

Или воспользуйтесь поиском по форуму:
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
05.10.2010, 15:47  [ТС]     Определить количество положительных элементов массива, предшествующих первому отрицательному #12
Спасибо за разъяснения
Yandex
Объявления
05.10.2010, 15:47     Определить количество положительных элементов массива, предшествующих первому отрицательному
Ответ Создать тему
Опции темы

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