Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 3
1

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

23.07.2012, 17:43. Показов 925. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание найти первый и последний неотрицательные эллементы массива.

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

если значение 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2012, 17:43
Ответы с готовыми решениями:

Почему при инициализации данных программа работает быстрей?
Почему при инициализации данных программа работает быстрей?

Метод хорд не работает при любых входных данных
уравнение: sqrt( a + ln(x) ) = b * x; #include &lt;iostream&gt; #include &lt;windows.h&gt; #include...

Почему вылетает программа при 32768, а при 20 все работает нормально?
Помогите исправить, почему программа вылетает при больших числах, а если поставить маленькие то все...

Почему при умножении на 0, программа работает правильно?
Операции ввода, такие, как cin, должны уметь преобразовывать последо- вательность символов в число....

8
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
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;
}
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
23.07.2012, 18:04 3
BkmzCvjktd,
C++
1
2
 int size = 10;
    int arr[size];
А как это вообще компилируется?

Или это компилятор умный и приводит к const?
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
23.07.2012, 18:07 4
David Sylva - Вы нашли первые отрицательные элементы, а надо был - неотрицательные...
2
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
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;
}
1
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 3
23.07.2012, 18:29  [ТС] 6
Такое решение у меня было, но сейчас пытаюсь разобраться с указателями и хотел эту же задачу решить используя их.

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

Заметил такую закономерность, если массив чисел заканчивается положительным числом то всё работает как нужно, а если отрицательным то выдаётся только массив и работа программы останавливается.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
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;
}
0
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 3
23.07.2012, 18:38  [ТС] 8
Я понимаю, но что не так именно в моей версии, почему программа не сабатывает при последнем отрицательном числе?

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

Добавлено через 4 минуты
Всё, спасибо, разобрался сам, спасибо всем откликнувшимся, особенно Catstail, обязательно изучу ваш вариант
0
31 / 31 / 3
Регистрация: 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;
}
0
23.07.2012, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2012, 18:39
Помогаю со студенческими работами здесь

Почему при одинаковых входных данных CryptDeriveKey генерит разные ключи?
Одинаковый провайдер, одинаковый метод, одинаковые хэш данные а ключи всё время разные .... Почему?...

При открытии консоли и вводе некоторых данных, программа выбивает ошибку, белое окно, типа закрыть программу
При открытие консоли и вводе некоторых данных, резко выбиввет ошибку) белое окно, типа закрыть...

Почему не работает новая память на некоторых системах
Нередко на форуме появляются темы, в которых авторы сетуют, что с новокупленными модулями...

Почему работает программа при выходе за пределы массива?
Добрый день, возникла проблема. Я задал одномерный массив из 10 элементов, однако, когда в я цикле...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru