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

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

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

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

11.07.2013, 06:55. Просмотров 484. Ответов 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" );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 06:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Цикл for проверка 0 (C++):

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

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

Цикл: цикл for вообще никак не воспринимается транслятором - C++
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая проблема: цикл for вообще никак не...

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

Задание на цикл с параметром и цикл с постусловием - C++
Помогите пожалуйста написать программу с этими циклами. 1. Вычислить и напечатать таблицу значений функции Z= (e^-x)sinx для 0&lt;=x&lt;=П,...

Цикл for/Цикл while Помогите срочно пожалуйста... - C++
1.Вычислить и вывести на экран в виде таблицы значения функции F от x1 до x2 с шагом dx. где a, b и c - действительные числа. 2.Цикл...

9
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:12 #2
function, start_of_range, end_of_range какого типа?
0
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 07:13  [ТС] #3
Цитата Сообщение от Kukurudza Посмотреть сообщение
function, start_of_range, end_of_range какого типа?
double
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:19 #4
при зацикливании какие значения вводите?
ну и функцию Input_Validation в студию.
0
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 07:21  [ТС] #5
если ввожу 0 в шаг табулирования, могу выложить весь код если необходимо
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:25 #6
Цитата Сообщение от Helo Посмотреть сообщение
вожу 0 в шаг табулирования
тогда возможно ясно. вы вводите 0, но в дабле это может быть вовсе не ноль а очень маленькое число ~ 1e-15. смысл понятен?
0
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 07:29  [ТС] #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?
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.07.2013, 07:34 #8
Цитата Сообщение от Helo Посмотреть сообщение
А можно ли все таки как исправить
да запросто. если вы сравниваете два дабла, то вы должны сравнивать их с установленной вами погрешностью. например сравнение двух даблов между собой правильно делается как минимум так:
Код
bool eq (const double a, const double b, const double EPS = 1e-7) {
    return fabs(a - b) <= EPS;
}
где EPS выбирается из ваших потребностей в точности
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
11.07.2013, 09:22 #9
Helo, не используйте комментарии там где они излишни. Пренебрежение этим правилом делает вашу программу менее читабельной чем вообще без комментариев.
0
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
11.07.2013, 10:00  [ТС] #10
Цитата Сообщение от Ilot Посмотреть сообщение
Helo, не используйте комментарии там где они излишни. Пренебрежение этим правилом делает вашу программу менее читабельной чем вообще без комментариев.
Данную программу пишу человеку который совсем не понимает в программировании поэтому и комментирую каждый свой шаг
0
11.07.2013, 10:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 10:00
Привет! Вот еще темы с ответами:

Цикл с параметром и цикл с условием - C++
1. Составить программу вычисления суммы первых 10 непарных чисел 2. Дано числовой ряд и некоторое число &quot;епсила&quot;. Найти сумму...

Visual C++ проверка ввода на число, проверка на кирилицу - C++
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. Этот код проверяет на буквы и знаки,...

заменить цикл for на цикл while - C++
#include &lt;iostream&gt; using namespace std; int main() { int N, M, sum; cout &lt;&lt; &quot;Введите число N:&quot; &lt;&lt; endl; ...

Изменить цикл for на цикл do-while - C++
помогите передать программу с цикла FOR в цикл DO-WHILE #include &lt;math.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace...


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

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

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