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

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

Войти
Регистрация
Восстановить пароль
 
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
#1

Работа с массивами (Крешится программа) - C++

02.05.2012, 19:59. Просмотров 531. Ответов 12
Метки нет (Все метки)

Вычислить суму ряда с помощью цикла. Значение n вводится с клавиатуры.
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
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
void main ()
{
    int i,n;
    float s1,s2,s=0;
    printf("Type n:\n");
    scanf("%d",&n);
    int*a=new int [n];
    for (i=0; i<n;i++) 
        a[i]=rand()%10;
    int*b=new int[n];
    for(i=0;i<n;i++)
        b[i]=rand()%10;
    i=0, s1=0; //Г–ГЁГЄГ« Г± ïðåäóñëîâèåì
    while (i<(n-5))
    {
        s1+=(a[i]/(b[i]-5));
        i++;
    }
    i=(n-2),s2=0;
    while (i<n)
    {
        s1+=sqrt(b[i]*a[i]);
        i++;
    }
    printf("Result=%f",(s1+s2));
}
При запуске, после ввода n программа крешится. Вроде все проверил, ничего не помогает.
Задание во вложении
Миниатюры
Работа с массивами (Крешится программа)  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
02.05.2012, 22:16     Работа с массивами (Крешится программа) #2
во первых
int main () а во вторых, просто вопрос, зачем тебе переменная s? где используется?

Добавлено через 1 минуту
C++ (Qt)
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
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main ()
{
    int i,n;
    float s1,s2=0;
    printf("Type n:\n");
    scanf("%d",&n);
    int*a=new int [n];
    for (i=0; i<n;i++)
        a[i]=rand()%10;
    int*b=new int[n];
    for(i=0;i<n;i++)
        b[i]=rand()%10;
    i=0, s1=0; //Цикл с предусловием
    while (i<(n-5))
    {
        s1+=(a[i]/(b[i]-5));
        i++;
    }
    i=(n-2),s2=0;
    while (i<n)
    {
        s1+=sqrt(b[i]*a[i]);
        i++;
    }
    printf("Result=%f",(s1+s2));
    getch();
}
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
02.05.2012, 22:25  [ТС]     Работа с массивами (Крешится программа) #3
s осталось от старой версии кода, где s было s1+s2
просто забыл про нее)
сейчас попробую вашу программу, спасибо

Добавлено через 5 минут
так же крешится
как я заметил при значениях n >= 8
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
02.05.2012, 22:43     Работа с массивами (Крешится программа) #4
в общем смотри, при 3ем прохождении цикла
C++ (Qt)
1
2
3
4
5
    while (i<(n-5))
    {
        s1+=(a[i]/(b[i]-5));
        i++;
    }
получается там деление на 0 (через отладчик глянул)

Добавлено через 1 минуту
Можешь просто сделать проверку, что есть b[i]==0 то чтобы начинал другой виток, или чтобы выходило сообщение об ошибке, что невозможно посчитать

Добавлено через 7 минут
Вообще не будущее советую делать проверки, например, что будет если я введу -1 в твою программу, или 0, а если есть деление, как здесь, то вообще лучше предохраняться от деления на 0 заранее.
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
02.05.2012, 22:51  [ТС]     Работа с массивами (Крешится программа) #5
я, кстати, так и подумал
но почему каждый раз крешится, значит программа генерирует "одинаковые случайные числа" каждый раз?
go
Эксперт C++
3585 / 1365 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.05.2012, 22:51     Работа с массивами (Крешится программа) #6
http://liveworkspace.org/code/389ba6...221979cab33733


Цитата Сообщение от dekartkaine Посмотреть сообщение
a[i]=rand()%10;
C
1
a[i] = (rand() % 10) + 1;
и т.д.
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
02.05.2012, 23:09     Работа с массивами (Крешится программа) #7
Цитата Сообщение от dekartkaine Посмотреть сообщение
я, кстати, так и подумал
но почему каждый раз крешится, значит программа генерирует "одинаковые случайные числа" каждый раз?
Это называется ПСЕВДОслучайные числа. Чтобы такого не получалось, сделай так.

C++ (Qt)
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 <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
int main ()
{
    int i,n;
    float s1,s2=0;
    printf("Type n:\n");
    scanf("%d",&n);
    int*a=new int [n];
    for (i=0; i<n;i++)
        a[i]=rand()*RAND_MAX*10%10;
    int*b=new int[n];
    for(i=0;i<n;i++)
        b[i]=rand()*RAND_MAX*10%10;
    i=0, s1=0; //Цикл с предусловием
    while (i<(n-5))
    {
        if (b[i]==5)
        {
            printf("Devide by zero. Error.");
            exit(0);
        }
        s1+=(a[i]/(b[i]-5));
        i++;
    }
    i=(n-2),s2=0;
    while (i<n)
    {
        s1+=sqrt(b[i]*a[i]);
        i++;
    }
    printf("Result=%f",(s1+s2));
    getch();
}
go
Эксперт C++
3585 / 1365 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.05.2012, 23:12     Работа с массивами (Крешится программа) #8
Цитата Сообщение от Buildog Посмотреть сообщение
a[i]=rand()*RAND_MAX*10%10;
А толку?
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
02.05.2012, 23:13     Работа с массивами (Крешится программа) #9
Ну для a[i] не было смысла, я просто так добавил, для b[i] это актуально будет. Хотя если для a[i] это убрать, то там результат не получается.
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
02.05.2012, 23:24  [ТС]     Работа с массивами (Крешится программа) #10
Вроде бы работает, но почему то в случае ошибки выдает не сообщение об ошибке, как должен.
А пишет вот это.
go
Эксперт C++
3585 / 1365 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.05.2012, 23:30     Работа с массивами (Крешится программа) #11
dekartkaine, это NaN.
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
02.05.2012, 23:37     Работа с массивами (Крешится программа) #12
Это происходит из за извлечения корня из отрицательного числа, добавь 2 условия
C++ (Qt)
1
2
        if (b[i]<0) b[i]=-b[i];
        if (a[i]<0) a[i]=-a[i];
перед вычислением корня в конце
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 00:00     Работа с массивами (Крешится программа)
Еще ссылки по теме:

Работа с массивами C++
C++ Программа с Массивами, нужен код
Работа с массивами C++

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

Или воспользуйтесь поиском по форуму:
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
03.05.2012, 00:00  [ТС]     Работа с массивами (Крешится программа) #13
так можно тогда же просто модуль под корень поставить

Добавлено через 14 секунд
вобщем спасибо за помощь, разобрался)
Yandex
Объявления
03.05.2012, 00:00     Работа с массивами (Крешится программа)
Ответ Создать тему
Опции темы

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