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

Вывод длинного числа вместо нуля - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
TIGER535
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 8
03.03.2012, 01:25     Вывод длинного числа вместо нуля #1
предполагаю что проблема мелкая, но либо меня гугл забанил, либо ввожу в поиск не то..

перейдем к делу,
1) программа создает массив, ищет минимальное и максимальное значение
и их индексы, но при выводе если индекс равен нулю, то вместо него выводится большое число
(последний раз выдала -858993460), пробовал менять типы переменных, но толку нет


2) не совсем вопрос, скорее прошу совета, далее надо вывести массив из элементов
между min и max, сделать это проверкой через if или есть какое нибудь более рациональное решение?


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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// lab4.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
int _tmain(int argc, _TCHAR* argv[])
{ 
    setlocale(0,"Rus");  
    int n, minid, maxid, colvo;         //n - служебная переменная для индексации чисел в массиве, индексы минимального и максимального значений, подсчет количества элементов между max и min
    float massiv1[10], min, max;        //первый массив, минимальное и максимальное значение
 
    time_t m;                           //поленился прочитать зачем это, но похоже это привязка рандома к времени, прочитал, так и есть
    srand (time(NULL));
    
    for (n=0;n<10;n++)                  //цикл для построения и вывода массива
    {
        massiv1[n] = rand()%100 * ( rand() % 2 ? 1 : -1 );
        printf("\t %2.3f ",massiv1[n]);
        //printf("\t");
    }
    min = massiv1[0];
    max = massiv1[0];
    for (n=0;n<10;n++)
    {
        if (massiv1[n] < min)                   //поиск максимального и минимального значений
        {
            min = massiv1[n];
            minid = n;  
        }
        if (massiv1[n] > max)
        {
            max = massiv1[n];
            maxid = n;
        }   
    }
        printf("\n");
        printf("\n  Минимальный элемент равен %2.3f его номер %d", min, minid);             //вывод результатов
        printf("\n");
        printf("\n  Максимальный элемент равен %2.3f его номер %d ", max, maxid);
        printf("\n");
        printf("\n");
        printf("\n Количество эл между max и min %d ", colvo=abs(maxid-minid));
    //for (n=minid;n<maxid;n++)
    //{
    //  printf("\t %2.3f ",massiv1[n]);
    //}
 
    printf("\n");
    printf("\n");
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
03.03.2012, 01:45     Вывод длинного числа вместо нуля #2
TIGER535,
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
int main()
{ 
        setlocale(0,"Rus");  
        int n, minid=0, maxid=0, colvo=0;                     //n - служебная переменная для индексации чисел в массиве, индексы минимального и максимального значений, подсчет количества элементов между max и min
        float massiv1[10], min, max;            //первый массив, минимальное и максимальное значение
 
        time_t m;                                                       //поленился прочитать зачем это, но похоже это привязка рандома к времени, прочитал, так и есть
        srand (time(NULL));
        
        for (n=0;n<10;n++)                                      //цикл для построения и вывода массива
        {
                massiv1[n] = rand()%100 * ( rand() % 2 ? 1 : -1 );
                printf("\t %2.3f ",massiv1[n]);
                //printf("\t");
        }
        min = massiv1[0];
        max = massiv1[0];
        for (n=0;n<10;n++)
        {
                if (massiv1[n] < min)                                   //поиск максимального и минимального значений
                {
                        min = massiv1[n];
                        minid = n;      
                }
                if (massiv1[n] > max)
                {
                        max = massiv1[n];
                        maxid = n;
                }       
        }
                printf("\n");
                printf("\n  Минимальный элемент равен %2.3f его номер %d", min, minid);                         //вывод результатов
                printf("\n");
                printf("\n  Максимальный элемент равен %2.3f его номер %d ", max, maxid);
                printf("\n");
                printf("\n");
                printf("\n Количество эл между max и min %d ",colvo=abs(maxid-minid-1));
                if(maxid<minid)
                {
                    n=maxid; maxid=minid; minid=n;}
        for (n=minid+1;n<maxid;n++)
        {
              printf("\t %2.3f ",massiv1[n]);
        }
 
        printf("\n");
        printf("\n");
        getch();
        return 0;
}
На будущее: если еще раз увидите примерно такое:
Цитата Сообщение от TIGER535 Посмотреть сообщение
последний раз выдала -858993460
ищите ошибку. В данном случае она была у Вас здесь (см комментарии):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
int _tmain(int argc, _TCHAR* argv[])
{ 
        setlocale(0,"Rus");  
        int n, minid, maxid, colvo;      // значения переменных minid, maxid не определены ()
        ........
        printf("\n  Минимальный элемент равен %2.3f его номер %d", min, minid); // при условии что первый элемент минимальный значение minid осталось не определенным
                printf("\n");
                printf("\n  Максимальный элемент равен %2.3f его номер %d ", max, maxid);// при условии что первый элемент максимальный значение minid осталось не определенным
 
 
        printf("\n");
        printf("\n");
        getch();
        return 0;
}
TIGER535
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 8
03.03.2012, 02:10  [ТС]     Вывод длинного числа вместо нуля #3
ясно, а как на счет второго вопроса?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
03.03.2012, 02:15     Вывод длинного числа вместо нуля #4
Цитата Сообщение от TIGER535 Посмотреть сообщение
ясно, а как на счет второго вопроса?
ну в принципе в моем коде это есть, вот в этих строчках:
C
1
2
3
4
5
6
7
                               if(maxid<minid)
                                {
                                        n=maxid; maxid=minid; minid=n;}
        for (n=minid+1;n<maxid;n++)
        {
              printf("\t %2.3f ",massiv1[n]);
        }
если мой код запускали, должны были увидеть.
TIGER535
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 8
03.03.2012, 03:34  [ТС]     Вывод длинного числа вместо нуля #5
извиняюсь, принял за цитату моего поста

Добавлено через 38 минут
Может кому пригодится: задание и решение


Задать массив из 10 вещественных чисел с помощью датчика случайных чисел.
Найти минимальный и максимальный элементы массива, указать их индексы.
Из элементов расположенных между ними создать массив, вывести его на экран, подсчитать количество четных значений.
На печать числа выводить с тремя знаками после запятой.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
int _tmain(int argc, _TCHAR* argv[])
{ 
    setlocale(0,"Rus");  
    int n, minid = 0, maxid = 0, colvo, chet = 0, a = 0;                                    //n - служебная переменная для индексации чисел в массиве, индексы минимального и максимального значений, подсчет количества элементов между max и min
    float massiv1[10], min, max;                                                            //первый массив, минимальное и максимальное значение
 
    time_t m;                                                                               //привязка рандома к времени
    srand (time(NULL));
    
    for (n=0;n<10;n++)                                                                      //цикл для построения и вывода массива
    {
        massiv1[n] = rand()%100 * ( rand() % 2 ? 1 : -1 );
        printf("\t %2.3f ",massiv1[n]);
    }
    min = massiv1[0];
    max = massiv1[0];
    for (n=0;n<10;n++)
    {
        if (massiv1[n] < min)                                                               //поиск максимального и минимального значений
        {
            min = massiv1[n];
            minid = n;  
        }
        if (massiv1[n] > max)
        {
            max = massiv1[n];
            maxid = n;
        }   
    }
        printf("\n");
        printf("\n  Минимальный элемент равен %2.3f его номер %d", min, minid);             //вывод результатов
        printf("\n");
        printf("\n  Максимальный элемент равен %2.3f его номер %d ", max, maxid);
        printf("\n");
        printf("\n  Количество эл между max и min %d \n \n", colvo=abs(maxid-minid)-1);
        printf("\n");
 
    if(maxid<minid)
        {
            n=maxid; maxid=minid; minid=n;                                                  //выводим элементы между минимальным и максимальным значением
        }
            for (n=minid+1;n<maxid;n++)
        {
              printf("\t %2.3f ",massiv1[n]);
        }
             for (n=minid+1;n<maxid;n++)
            {
                a = massiv1[n];
                a = a%2;
                if (a == 0)
                     chet++;
            }
    printf("\n \n  Количество четных чисел равно %d ", chet);                               //и количество четных из них
    printf("\n");
    printf("\n");
    getch();
    return 0;
}
Добавлено через 6 минут
Оффтоп, в целом нормально получилось для начинающего или плохо?
(это примерно 7-я программа на c++, не считая прошивок МК)
TIGER535
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 8
05.03.2012, 23:20  [ТС]     Вывод длинного числа вместо нуля #6
Поправил программу, теперь соответствует заданию.

Задать массив из 10 вещественных чисел с помощью датчика случайных чисел.
Найти минимальный и максимальный элементы массива, указать их индексы.
Из элементов расположенных между ними создать массив, вывести его на экран, подсчитать количество четных значений.
На печать числа выводить с тремя знаками после запятой.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
        setlocale(0,"Rus");  
        int n, minid = 0, maxid = 0, colvo, chet = 0, a = 0, x = 0; //n - служебная переменная для индексации чисел в массиве, индексы минимального и максимального значений, подсчет количества элементов между max и min
        float massiv1[10], min, max; //Первый массив, минимальное и максимальное значение
 
        time_t m; //Привязка рандома к времени
        srand (time(NULL));
 
        for (n=0;n<10;n++) //Цикл для построения и вывода массива
        {
                massiv1[n] = rand()%100 * ( rand() % 2 ? 1 : -1 );
                printf("\t %2.3f ",massiv1[n]);
        }
        min = massiv1[0];
        max = massiv1[0];
        for (n=0;n<10;n++)
        {
                if (massiv1[n] < min) //Поиск максимального
                {
                        min = massiv1[n];
                        minid = n;
                }
                if (massiv1[n] > max) //И минимального значений
                {
                        max = massiv1[n];
                        maxid = n;
                }
        }
                printf("\n");
                printf("\n  Минимальный элемент равен %2.3f его номер %d", min, minid); //Вывод результатов
                printf("\n");
                printf("\n  Максимальный элемент равен %2.3f его номер %d ", max, maxid); //Вывод результатов
                printf("\n");
                printf("\n  Количество эл между max и min %d \n \n", colvo=abs(maxid-minid)-1); //Вывод количества элеменьов между min и max
                printf("\n");
        float massiv2[10]; //Обьявляем massiv2
        if(maxid<minid) //Проверяем что бы максимальный id массива был больше минимального id
                {
                        n=maxid; maxid=minid; minid=n;
                }
                        for (n=minid+1;n<maxid;n++) //Добавляем элементы массива massiv1 стойщие между min и max
        {
                        massiv2[x] = massiv1[n];
                        x++;
        }
                        for (x = 0; x < colvo; x++) //Выводим массив massiv2
                        {
                                printf("\t %2.3f ",massiv2[x]);
                        }
                        for (x = 0; x < colvo; x++) //Считаем количество четных элементов в massiv2
                        {
                                a = massiv2[x];
                                a = a%2;
                                if (a == 0)
                                         chet++;
                        }
        printf("\n \n  Количество четных чисел равно %d ", chet); //Выводим количество четных чисел в massiv2
        printf("\n");
        printf("\n");
        getch();
        return 0;
}

Кто проверит?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.03.2012, 06:45     Вывод длинного числа вместо нуля #7
Цитата Сообщение от TIGER535 Посмотреть сообщение
подсчитать количество четных значений
вещественные числа бывают четными и нечетными?
TIGER535
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 8
06.03.2012, 19:12  [ТС]     Вывод длинного числа вместо нуля #8
хм, не заметил

1) некорректное задание?

2)массив из вещественных чисел, с тремя знаками после запятой,
а у меня дробной части нет, поделить на 1000?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.03.2012, 03:28     Вывод длинного числа вместо нуля #9
Цитата Сообщение от TIGER535 Посмотреть сообщение
1) некорректное задание?
получается что некорректное

Цитата Сообщение от TIGER535 Посмотреть сообщение
2)массив из вещественных чисел, с тремя знаками после запятой,
а у меня дробной части нет, поделить на 1000?
если просто поделить на 1000, то получите самые большие по модулю значения: 0,099 и -0,099. Т.е. целая часть чисел всегда будет равна 0.
Если это не устраивает, то можете:
Цитата Сообщение от TIGER535 Посмотреть сообщение
C++
1
massiv1[n] = rand()%100 * ( rand() % 2 ? 1 : -1 );
заменить например на:
C++
1
massiv1[n] = (float)(rand()%100000 * ( rand() % 2 ? 1 : -1 ))/1000;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2012, 13:14     Вывод длинного числа вместо нуля
Еще ссылки по теме:

C++ Вывод самого длинного слова в строке
C++ Вместо нуля выводит непонятное число
Как вычислить 2 в степени длинного числа? C++

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

Или воспользуйтесь поиском по форуму:
TIGER535
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 8
07.03.2012, 13:14  [ТС]     Вывод длинного числа вместо нуля #10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
если просто поделить на 1000
да, неправильно выразился, я имел ввиду именно то что вы написали
Yandex
Объявления
07.03.2012, 13:14     Вывод длинного числа вместо нуля
Ответ Создать тему
Опции темы

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