1

Тема: Поясніть будь ласка код (добуток та сума)

є ось така програма:

Прихований текст

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main()
{ int i, x[15], suma=0, dobutok=1;
 clrscr();
randomize();
 for(i=0; i<15; i++)
 {x[i]=15-random(30);
 if( x[i] > 0) { dobutok=dobutok*x[i]; }
 if( x[i] < 0) { suma=suma+x[i]; }
 }
 printf("suma vid`emnux=%d\n", suma);
 printf("dobutok dodatnux=%d\n", dobutok);
 }

після перших 4-5 запусків все було ок, результати задовільняли умову, але потім, добуток який має бути додатним, чомусь вивело від'ємний. Чому так вийшло ніяк не можу зрозуміти... Поясніть будь-ласка, що я не так зробив.

2

Re: Поясніть будь ласка код (добуток та сума)

Здогадуюсь...що добуток вийшов за максимальне значення...хоча можу і помилятись...

Тут мала би бути якась влучна фраза(вибачте, що витратив кілька секунд вашого часу на прочитання).
Подякували: muroclav1

3 Востаннє редагувалося muroclav (06.11.2012 07:42:30)

Re: Поясніть будь ласка код (добуток та сума)

Хмм, ви мабуть праві, якщо зменшити значення то виходить, але якщо ж наприклад записати:

..................
x[i]=50-random(5);
if( x[i] > 0) { dobutok=dobutok*x[i]; }
...................

також виходять то додатні, то від'ємні числа...
коли відбувається переповнення пам'яті, то можуть виводитися додатні і від'ємні числа?

4 Востаннє редагувалося DOP (06.11.2012 00:31:45)

Re: Поясніть будь ласка код (добуток та сума)

Ану спробуй оголосити з

long int
Тут мала би бути якась влучна фраза(вибачте, що витратив кілька секунд вашого часу на прочитання).

5

Re: Поясніть будь ласка код (добуток та сума)

без змін...

6

Re: Поясніть будь ласка код (добуток та сума)

тут дійсно виходить переповнення, для типу лонг це крайні значення

x[i]= 6 - rand() % 12;

я чучуть переписав програму під компілятор VC, ось вона можливо пригодиться.

// ConsoleCPP.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

using namespace std;

int main()
{
    int i, suma=0, dobutok=1;
    long x[15];
    system("cls");
    srand( time (NULL) );
    for (int q = 0; q < 10000; q++)
    {
        for(i=0; i<15; i++)
        {
            x[i]= 6 - rand() % 12;
            if( x[i] > 0) dobutok *= x[i]; 
            if( x[i] < 0) suma += x[i]; 
            
        }
        if(dobutok < 0 )
        {
            printf("\t\t\tsomething goes wrong \nindex = %d\nmul = %d", q, dobutok);
            for (int z = 0; z < 15; z++)
            {
                printf("%d ", x[z]);
            }
            break;
        }
        else
        {
            printf("ok \t mul = %d\n",dobutok);
            dobutok = 1;
            suma = 0;
        }
    }
    system("pause");
}

Re: Поясніть будь ласка код (добуток та сума)

muroclav, вподальшому, оформлюйте теми, згідно з правилами.