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

Почему не работает программа при некоторых входных данных - C++

Восстановить пароль Регистрация
 
BkmzCvjktd
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 3
23.07.2012, 17:43     Почему не работает программа при некоторых входных данных #1
Задание найти первый и последний неотрицательные эллементы массива.

и вывести их индексы

если значение size указать 20 то всё работает, а если к примеру 19, то выводит только массив, а индексы уже не выводит, программа просто останавливается и всё.

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>
#include <cstdlib>
using namespace std;
 
int main()
{
    int size = 10;
    int arr[size];
    int n,a,z;
    int *max, *min;
    a = 0;
    z = size - 1;
    
    min = arr;
    max = &arr[size-1];
    
    for (n = 0; n < size; n++) {
        arr[n] = rand() % 10 - 5;
        cout << arr[n] << "  ";
    }
    cout << " \n ";
    cout << " \n ";
    while (*min < 0) {
        min++;
        a++;
    }
    
    while (*max < 0) {
        min--;
        z--;
    }
    
    cout << a << " " << z << "\n";
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 17:43     Почему не работает программа при некоторых входных данных
Посмотрите здесь:

Почему при инициализации данных программа работает быстрей? C++
почему программа выдает ошибку при первом запуске, а дальше работает нормально? Код C C++
Почему программа Работает? C++
C++ Не могу разобраться почему не работает программа(Код, написанный на Borland C++ не работает в Dev C++)
Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
23.07.2012, 18:01     Почему не работает программа при некоторых входных данных #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
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main()
{   
    srand((unsigned) time(0));
    const int size = 10;
    int array[size]; 
    int i; 
    int first_min, last_min; 
 
    for ( i = 0; i < size; i++) 
        array[i] = -10 + rand() % 21; 
 
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl; 
 
    for ( i = 0; i < size; i++) 
        if(array[i] < 0) 
        {
            first_min = i;  
            break; 
        }
 
    for ( i = size - 1; i > 0; i--) 
        if(array[i] < 0)  
        {
          last_min = i; 
          break;
        }
 
    cout << "First min element indeks " << first_min << endl;  
    cout << "Last min element indeks " << last_min << endl;
}
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.07.2012, 18:04     Почему не работает программа при некоторых входных данных #3
BkmzCvjktd,
C++
1
2
 int size = 10;
    int arr[size];
А как это вообще компилируется?

Или это компилятор умный и приводит к const?
Catstail
Модератор
 Аватар для Catstail
21427 / 10212 / 1664
Регистрация: 12.02.2012
Сообщений: 17,082
23.07.2012, 18:07     Почему не работает программа при некоторых входных данных #4
David Sylva - Вы нашли первые отрицательные элементы, а надо был - неотрицательные...
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
23.07.2012, 18:10     Почему не работает программа при некоторых входных данных #5
Исправлено благодаря советам более внимательных людей
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 <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main()
{   
    srand((unsigned) time(0));
    const int size = 10;
    int array[size]; 
    int i; 
    int first_min, last_min; 
 
    for ( i = 0; i < size; i++) 
        array[i] = -10 + rand() % 21; 
 
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl; 
 
    for ( i = 0; i < size; i++) 
        if(array[i] > 0) 
        {
            first_min = i;  
            break; 
        }
 
    for ( i = size - 1; i > 0; i--) 
        if(array[i] > 0)  
        {
          last_min = i; 
          break;
        }
 
    cout << "First min element indeks " << first_min << endl;  
    cout << "Last min element indeks " << last_min << endl;
}
BkmzCvjktd
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 3
23.07.2012, 18:29  [ТС]     Почему не работает программа при некоторых входных данных #6
Такое решение у меня было, но сейчас пытаюсь разобраться с указателями и хотел эту же задачу решить используя их.

Но она работает как то странно.

Заметил такую закономерность, если массив чисел заканчивается положительным числом то всё работает как нужно, а если отрицательным то выдаётся только массив и работа программы останавливается.
Catstail
Модератор
 Аватар для Catstail
21427 / 10212 / 1664
Регистрация: 12.02.2012
Сообщений: 17,082
23.07.2012, 18:30     Почему не работает программа при некоторых входных данных #7
Кстати, для самого поиска достаточно одного цикла:

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
#include <iostream.h>
 
int main(int argc, char* argv[])
{
 
    int Arr[]={-7,-5,0,7,-7,-10,-8};
    int n=sizeof(Arr)/sizeof(int);
    int i,j,i_f=-1,i_l=-1;
 
    j=n-1;
    for (i=0; i<n; i++)
    {
        if (j < i) break;
        if ((i_f < 0) && (Arr[i] >= 0)) i_f=i;
        if ((i_l < 0) && (Arr[j] >= 0)) i_l=j;
        j--;
    }
 
    if ((i_l < 0) && (i_f < 0))
        cout << "all elements are negative";
    else
        if (i_l < 0) cout << "single element =" << Arr[i_f]  << endl;
        if (i_f < 0) cout << "single element =" << Arr[i_l]  << endl;
        if ((i_f >=0) && (i_l >= 0)) cout << "first el=" << Arr[i_f] << " last el=" << Arr[i_l] << endl;
 
    return 0;
}
BkmzCvjktd
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 3
23.07.2012, 18:38  [ТС]     Почему не работает программа при некоторых входных данных #8
Я понимаю, но что не так именно в моей версии, почему программа не сабатывает при последнем отрицательном числе?

Если важно то использую компилятор geany в ubunu 12.04

Добавлено через 4 минуты
Всё, спасибо, разобрался сам, спасибо всем откликнувшимся, особенно Catstail, обязательно изучу ваш вариант
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 18:39     Почему не работает программа при некоторых входных данных
Еще ссылки по теме:

Почему не работает программа? C++
При некоторых компиляциях программа медленно исполняется C++
Задание на ряды: программа зацикливается при вводе некоторых значений C++

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

Или воспользуйтесь поиском по форуму:
Endiff
 Аватар для Endiff
30 / 30 / 1
Регистрация: 19.05.2012
Сообщений: 67
23.07.2012, 18:39     Почему не работает программа при некоторых входных данных #9
Была ошибочка в цикле с *max, ты сбавлял адрес у min. И еще проверочки не было на выход за пределы.
Насчет ошибки в цикле - из-за неё вся проблема. Представь что первое неотрицательное число - первое значение. А последнее неотрицательное - не последнее число. В цикле ты сбавлял адрес минимального, а оно уже выходило за пределы массива. И хрен знает, что оно там проверяло.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    const int size = 10;
    int arr[size];
    int n, a, z;
    int *max, *min;
    
    a = 0;
    z = size - 1;
    
    min = arr;
    max = &arr[z];
    
    srand((unsigned)time(NULL)); rand(); rand();
    
for (n = 0; n < size; n++) {
        arr[n] = rand() % 10 - 5;
        cout << arr[n] << ", ";
    }
 
    cout << endl << endl;
 
    while (*min < 0) {
        if(a >= size) break;
        min++;
        a++;
    }
    
    while (*max < 0) {
        if(z == 0) break;
        max--;
        z--;
    }
    
    cout << a + 1 << " " << z + 1 << "\n";
    
    return 0;
}
Yandex
Объявления
23.07.2012, 18:39     Почему не работает программа при некоторых входных данных
Ответ Создать тему
Опции темы

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