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

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

Войти
Регистрация
Восстановить пароль
 
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
#1

Цикл for проверка 0 - C++

11.07.2013, 06:55. Просмотров 465. Ответов 9
Метки нет (Все метки)

Здравствуйте подскажите если не трудно. Пишу программу и нужно чтобы вводимые данные проверялись на <= 0.
Так вот когда ввожу меньше 0 цикл работает, но если ввести 0 происходит зацикливание. Как изменить код?
Какие еще способы печати таблицы результатов вы знаете?

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
/* Ввод данных */
    printf ( "\n%3s", " Введите начало диапазона: " );
    Input_Validation ( start_of_range );
    printf ( "\n%3s", " Введите конец  диапазона: " );
    Input_Validation ( end_of_range );
    printf ( "\n%3s", " Введите шаг табулирования: " );
    do{
    Input_Validation ( step_tabulation );
    /* Если шаг табулирования <= 0 */
    if ( step_tabulation <= 0 ) 
    {
        printf ( "\n%3s", " Шаг табулирования не может быть <= 0 Повторите ввод данных: " );
        continue;}
    else break;}
    while (step_tabulation != 0);
 
    /* Шапка таблицы */
    printf ( " ________________________________\n" );
    printf ( " | N |\t X\t|\tY\t|\n" );
    /* Цикл for от начала диапазона до конца  диапазона с заданным шагом табулирования */
    for ( function = start_of_range; function <= end_of_range; function += step_tabulation )
        /* Вывод резултатов вычисления функции */
        printf ( " |%3d|%4.5g\t|%12.8g\t|\n", point_tabulation ++, function, pow ( function, function ) * pow ( exponent, - function ) );
    /* Завершение таблицы */
    printf ( " --------------------------------\n" );
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 06:55     Цикл for проверка 0
Посмотрите здесь:

Матрицы. Бесконечный цикл. Проверка ввода - C++
В конструкторе класса матриц пользователю предлагается выбрать ввода с клавиатуры или автоматически. При выборе ручного ввода возникает...

Проверка, является ли число простым (используя цикл for) - C++
Помогите довести до ума)) не знаю куда б добавить return... #include &lt;iostream&gt; using namespace std; int res(int p) ...

Проверка в тесте (цикл не работает) - PHP
Есть тест, например: &lt;?php print ($vopros) ?&gt; &lt;br&gt; &lt;input name=vop1 type=radio value=v1_1&gt; &lt;?php print ($vopros) ?&gt; &lt;br&gt; ...

Цикл с условием. Проверка числа на простоту - Turbo Pascal
Дано челое число N(&gt;1). Если оно является простым , то есть не имеет положительных делителей , кроме 1 и самого себя , то вывести TRUE ,...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием... - Turbo Pascal
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать учесть особенности получения квадратного...

Консольное приложение, цикл while: запрос пароля и проверка его правильности - Delphi
Помогите чайнику составить программу через оператора While, которая требует у пользователя пароль (*$*$) и если пароль правильный, то...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:12     Цикл for проверка 0 #2
function, start_of_range, end_of_range какого типа?
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 07:13  [ТС]     Цикл for проверка 0 #3
Цитата Сообщение от Kukurudza Посмотреть сообщение
function, start_of_range, end_of_range какого типа?
double
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:19     Цикл for проверка 0 #4
при зацикливании какие значения вводите?
ну и функцию Input_Validation в студию.
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 07:21  [ТС]     Цикл for проверка 0 #5
если ввожу 0 в шаг табулирования, могу выложить весь код если необходимо
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:25     Цикл for проверка 0 #6
Цитата Сообщение от Helo Посмотреть сообщение
вожу 0 в шаг табулирования
тогда возможно ясно. вы вводите 0, но в дабле это может быть вовсе не ноль а очень маленькое число ~ 1e-15. смысл понятен?
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 07:29  [ТС]     Цикл for проверка 0 #7
Цитата Сообщение от Kukurudza Посмотреть сообщение
при зацикливании какие значения вводите?
ну и функцию Input_Validation в студию.
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* Tabulation of functions of one variable.cpp: определяет точку входа для консольного приложения */
 
#include "stdafx.h"
 
/*_______________________________________________ Подключаемые директивы препроцессора ___________*/
 
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include <cmath>
 
/*_______________________________________________ Прототипы функций ______________________________*/
 
void Input_Validation ( double & );                                  /* Проверка ввода */
void Tabulation_of_functions ( double &, double &, double & );       /* Табулирование функции */
 
/*_______________________________________________ Основная программа _____________________________*/
 
int _tmain(int argc, _TCHAR* argv[])  /* Старт программы */ 
{
    /* Локальная установка */
    setlocale (LC_ALL,"RUSSIAN");
    /* Строковой тип данных */
    std::string
        choice;
    /* Вещественный тип данных */
    double
        start_of_range      /* Начало диапазона  */,
        end_of_range        /* Конец  диапазона  */,
        step_tabulation     /* Шаг табулирования */;
    do      /* Начало цикла */
    {
        system ("cls");     /* Очистка окна консоли */
        Tabulation_of_functions ( start_of_range, end_of_range, step_tabulation );     /* Вызов функции */
        /* Запрос на завершение работы программы */
        start:printf ( "\n%3s", " Завершить работу программы: (Y/N) " );
        /* Ввод */
        choice = _getch ();
        if ( ( choice == "n" ) || ( choice == "N" ) )          /* Если n или N то продолжить */
            continue;
        else if ( ( choice == "y" ) || ( choice == "Y" ) )     /* Если y или Y то выход */
            exit ( 0 );
        else printf ( "\n%3s", " Ошибка! (неправильный символ) Повторите ввод: " ); goto start;     /* Если неправильный ввод */
    }
    while ( ( choice == "n" ) || ( choice == "N" ) );     /* Проверка условия и завершение цикла */
    _getch ();     /* Пауза */
    return 0;      /* Завершение программы */
}
 
/*_______________________________________________ Проверка ввода _________________________________*/
 
void Input_Validation ( double & number )
{
    std::string symbol;
    do  /* Начало цикла */
    {
        /* Ввод символа */
        std::cin >> number;
        /* Проверка является ли символ числом */
        if ( std::cin.fail () )
        {
            /* Если нет вывод ошибки и запрос на повторный ввод */
            std::cin.clear ();
            std::cin >> symbol;
            printf ( " %s\n ", " Это не число! Повторите ввод данных: " ); continue;
        }
        /* Если да завершение цикла */
        else break;
    }
    while ( true );     /* Проерка условия и завершение цикла */
}
 
/*_______________________________________________ Табулирование функции __________________________*/
 
void Tabulation_of_functions ( double & start_of_range, double & end_of_range, double & step_tabulation )
{
    /* Вещественный тип данных */
    double
        function,                     /* Функция f(x) */
        exponent = 2.7182818285;      /* Константа числа е */
    /* unsigned безнаковый, short короткий, int целый тип данных */
    unsigned short int
        point_tabulation = 1; /* Точки табулирования, начальное значение равно 1 */
    /* Ввод данных */
    printf ( "\n%3s", " Введите начало диапазона: " );
    Input_Validation ( start_of_range );
    printf ( "\n%3s", " Введите конец  диапазона: " );
    Input_Validation ( end_of_range );
    printf ( "\n%3s", " Введите шаг табулирования: " );
    //while ( step_tabulation != 0 )
    do{
    Input_Validation ( step_tabulation );
    /* Если шаг табулирования <= 0 */
    if ( step_tabulation <= 0 ) 
    {
        printf ( "\n%3s", " Шаг табулирования не может быть <= 0 Повторите ввод данных: " );
        continue;}
    else break;}
    while (step_tabulation != 0);
    /* Шапка таблицы */
    printf ( " ________________________________\n" );
    printf ( " | N |\t X\t|\tY\t|\n" );
    /* Цикл for от начала диапазона до конца  диапазона с заданным шагом табулирования */
    for ( function = start_of_range; function <= end_of_range; function += step_tabulation )
        /* Вывод резултатов вычисления функции */
        printf ( " |%3d|%4.5g\t|%12.8g\t|\n", point_tabulation ++, function, pow ( function, function ) * pow ( exponent, - function ) );
    /* Завершение таблицы */
    printf ( " --------------------------------\n" );
}
Добавлено через 3 минуты
Цитата Сообщение от Kukurudza Посмотреть сообщение
тогда возможно ясно. вы вводите 0, но в дабле это может быть вовсе не ноль а очень маленькое число ~ 1e-15. смысл понятен?
А можно ли все таки как исправить или придется менять тип на int?
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:34     Цикл for проверка 0 #8
Цитата Сообщение от Helo Посмотреть сообщение
А можно ли все таки как исправить
да запросто. если вы сравниваете два дабла, то вы должны сравнивать их с установленной вами погрешностью. например сравнение двух даблов между собой правильно делается как минимум так:
Код
bool eq (const double a, const double b, const double EPS = 1e-7) {
    return fabs(a - b) <= EPS;
}
где EPS выбирается из ваших потребностей в точности
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
11.07.2013, 09:22     Цикл for проверка 0 #9
Helo, не используйте комментарии там где они излишни. Пренебрежение этим правилом делает вашу программу менее читабельной чем вообще без комментариев.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 10:00     Цикл for проверка 0
Еще ссылки по теме:

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор? - Visual C++
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не грузил процессор. Избавиться от...

Написать в турбо паскале, Цикл с параметром, Цикл, с постусловием, и с предусловием пожалуйста - Turbo Pascal

.NET 3.x Почему если условие входа в цикл не выполняется, функция заново входит в цикл - C#
Сам код: private void traverse_node(TreeControlItem node) { TreeControlItem childNode = default(TreeControlItem);...

Цикл: Как грамотно организовать цикл с получением количества верных и неверных ответов? - VBA
Доброго времени суток, товарищи. Вот есть у меня два рандомно генерируемых числа, проверка произведения которых проверяется вводом ответа...


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

Или воспользуйтесь поиском по форуму:
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 10:00  [ТС]     Цикл for проверка 0 #10
Цитата Сообщение от Ilot Посмотреть сообщение
Helo, не используйте комментарии там где они излишни. Пренебрежение этим правилом делает вашу программу менее читабельной чем вообще без комментариев.
Данную программу пишу человеку который совсем не понимает в программировании поэтому и комментирую каждый свой шаг
Yandex
Объявления
11.07.2013, 10:00     Цикл for проверка 0
Ответ Создать тему
Опции темы

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