Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

02.05.2012, 19:59. Просмотров 553. Ответов 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 программа крешится. Вроде все проверил, ничего не помогает.
Задание во вложении
0
Миниатюры
Работа с массивами (Крешится программа)  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2012, 19:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с массивами (Крешится программа) (C++):

программа с массивами - C++
Всем привет. Не получается скомпилировать прогу, выдаёт ошибку что то типа ошибка в переменной Программа с циклами.. Немного о...

программа с массивами - C++
помогите,пожалуйста, студенту написать прогу на си. Такая вот задача Дан одномерный массив А, состоящий из N элементов. Исключить из...

Dev-C++ Программа с массивами - C++
По неработающему образцу (данному учителем) написала программу. Как следствие: прога тоже нерабочая вышла. Образец (Пример ввода 5...

Работа с массивами - C++
Программа, которая считывает из заранее подготовленного текстового файла, и должна сначала вывести весь текст просто на экран, потом...

Работа с массивами - C++
Я ввожу переменную, например 456. Программа розбивает её и записьІвает в массив. int Array Array = 4; Array = 5; Array = 6;

Работа с массивами в С++ - C++
Доброго времени суток! Пытался составить программу, формулировка которой звучит так: Дан массив натуральных чисел n размерности m (m...

12
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();
}
0
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
02.05.2012, 22:25  [ТС] #3
s осталось от старой версии кода, где s было s1+s2
просто забыл про нее)
сейчас попробую вашу программу, спасибо

Добавлено через 5 минут
так же крешится
как я заметил при значениях n >= 8
0
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 заранее.
1
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
02.05.2012, 22:51  [ТС] #5
я, кстати, так и подумал
но почему каждый раз крешится, значит программа генерирует "одинаковые случайные числа" каждый раз?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.05.2012, 22:51 #6
http://liveworkspace.org/code/389ba686333e40e257221979cab33733


Цитата Сообщение от dekartkaine Посмотреть сообщение
a[i]=rand()%10;
C
1
a[i] = (rand() % 10) + 1;
и т.д.
0
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();
}
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.05.2012, 23:12 #8
Цитата Сообщение от Buildog Посмотреть сообщение
a[i]=rand()*RAND_MAX*10%10;
А толку?
0
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
02.05.2012, 23:13 #9
Ну для a[i] не было смысла, я просто так добавил, для b[i] это актуально будет. Хотя если для a[i] это убрать, то там результат не получается.
0
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
02.05.2012, 23:24  [ТС] #10
Вроде бы работает, но почему то в случае ошибки выдает не сообщение об ошибке, как должен.
А пишет вот это.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.05.2012, 23:30 #11
dekartkaine, это NaN.
0
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];
перед вычислением корня в конце
0
dekartkaine
1 / 1 / 0
Регистрация: 10.12.2011
Сообщений: 47
03.05.2012, 00:00  [ТС] #13
так можно тогда же просто модуль под корень поставить

Добавлено через 14 секунд
вобщем спасибо за помощь, разобрался)
0
03.05.2012, 00:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 00:00
Привет! Вот еще темы с ответами:

Работа с массивами - C++
Привет, как проще записать условие если дан длинный массив. Массив состоит из 25 чисел, нужно задать условие что если элемент от 0 к 14 и...

Работа с массивами - C++
Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому...

Работа с массивами - C++
Подскажите пожалуйста, что значит &quot;**&quot; в данной строке? void Array(int ** array, int size); Спасибо!

Программа с массивами и метод пузырька - C++
Здравствуйте, помогите написать программу на C++ связанной с работой массивов. Никак не могу понять, с чего и как начинать. Постановка...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.