Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
1

Проверка чисел на неотрицательность

11.10.2015, 16:34. Показов 1397. Ответов 22
Метки нет (Все метки)

Задача: Проверить лежат ли 4 точки в первом квадранте. Сделал блок-схему и код. Блок-схему одобрили, код не робит. Компилируется, выводится абракадабра, затем можно ввести 2 числа, выводится еще одна абракадабра, можно ввести еще 2 числа и перестает работать.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
int main ()
    {
    int i;
    int A[4][2];        //Точки, 4 - количество, 2 - х и y
    i = 1;
    int fl;
    fl=0;
    for (i<5; i++;)
    {
        printf(" Vvedite koordinati tochki \n");
        scanf("%f %f",&A[i][1],&A[i][2]);
        if (A[i][1]<=0 || A[i][2]<=0){
            break;
            fl=1;}
            i = i+1;
    }
    if fl=1
        printf("Tochki ne lezat v pervom kvadrante \n");
    if fl=0
        printf("Tochki lezat v pervom kvadrante \n");
}
Проверка чисел на неотрицательность
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2015, 16:34
Ответы с готовыми решениями:

Проверка на неотрицательность введеного числа
while(std::cin) // Ввод пока не произойдет прерываение сочетанием cntr+z (в windows) { ...

Проверка кода и советы по его улучшению. Генерация случайных чисел и проверка на уникальность
Привет народ! Занимаюсь изучением Java, захотелось реализовать выборку случайных чисел для лотереи....

Ввод двух целых чисел и проверка этих чисел условиями
.486 ; create 32 bit code .model flat, stdcall ...

Ввод двух целых чисел и проверка этих чисел условиями
Задача в том, что нужно ввести два числа и проверить: если 1-е отрицательное и 2-е положительное то...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
22
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
11.10.2015, 16:41 2
Olfy20, в 9 строке что это?

Добавлено через 56 секунд
Olfy20, может имелось ввиду это:
C++
1
for ( ; i<5; i++)
?
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
11.10.2015, 16:50  [ТС] 3
Ну, эмм, цикл.
Возможно, следовало бы написать
C
1
for (i=1; i<5; i++)
Но ведь до этого написано что i=1, а Ваш вариант мне не понятен.
0
201 / 137 / 88
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 17:30 4
C++
1
if fl=1
Что это? Может лучше так?
C++
1
if (fl==1)
А это
C++
1
for (i<5; i++;)
в вашем случае уместно заменить на это
C++
1
while (i<5)
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
11.10.2015, 18:00 5
Цитата Сообщение от Redzep Посмотреть сообщение
Может лучше так?
Или даже так:
C++
1
if (fl)
Добавлено через 35 секунд
Цитата Сообщение от Olfy20 Посмотреть сообщение
а Ваш вариант мне не понятен.
А мне Ваш.

Добавлено через 4 минуты
Olfy20, обычно, в цикле for схема действий такая:
C++
1
2
3
4
for (выражение1; выражение2; выражение3)
{
    // какой-то полезный код
}
где чаще всего
выражение1 - объявление и инициализация переменной, которую используют в качестве счётчика
выражение2 - условие окончания цикла
выражение3 - изменение счётчика на определённую величину

Добавлено через 3 минуты
Olfy20, теперь давайте взглянем на Ваш цикл for:
C++
1
2
3
4
for (i<5; i++; )
{
    // Ваш код
}
В качестве первого выражения у Вас i<5 (честно, я даже не знаю, что компилятор будет с этим делать).
В качестве второго i++ (всегда true, то есть бесконечный цикл).
Третье выражение у Вас отсутствует.
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
11.10.2015, 18:02  [ТС] 6
После замены fl=1 на (fl==1) и fl=0 на (fl==0), вместо абракадабры высвечивается нормальное Vvedite koordinati tochki, после ввода двух положительных точек по х и у, программа прекращает работу с ошибкой "Run-Time Check Failure #2 - Stack around the variable 'A' was corrupted.", после ввода отрицательных - прекращает без сообщений.

gru74ik, в Вашем варианте:
C
1
for ( ; i<5; i++)
выражение1 - пустое, я нуб и не понимаю какой в этом смысл, разъясните, пожалуйста.
0
2540 / 1199 / 358
Регистрация: 30.11.2013
Сообщений: 3,820
11.10.2015, 18:02 7
Цитата Сообщение от gru74ik Посмотреть сообщение
честно, я даже не знаю, что компилятор будет с этим делать
компилировать?)
0
201 / 137 / 88
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 18:07 8
Цитата Сообщение от Olfy20 Посмотреть сообщение
программа прекращает работу с ошибкой
А цикл какой использовали?
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
11.10.2015, 18:07  [ТС] 9
Убрал 16-ую строку, теперь вводит все точки, но дальше ошибка - Необработанное исключение по адресу 0x00893D42 в ОП лаб1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFC18F75C.
0
201 / 137 / 88
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 18:08 10
Новый код можно?
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
11.10.2015, 18:08  [ТС] 11
Redzep, for.

Добавлено через 13 секунд
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main ()
    {
    int i;
    int A[4][2];        //Точки, 4 - количество, 2 - х и y
    i = 1;
    int fl;
    fl=0;
    for (i=1; i<5; i++)
    {
        printf(" Vvedite koordinati tochki \n");
        scanf("%f %f",&A[i][1],&A[i][2]);
        if (A[i][1]<=0 || A[i][2]<=0){
            break;
            fl=1;}
            }
    if (fl==1)
        printf("Tochki ne lezat v pervom kvadrante \n");
    if (fl==0)
        printf("Tochki lezat v pervom kvadrante \n");
}
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
11.10.2015, 18:09 12
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
компилировать?)
Я хз.

Цитата Сообщение от Olfy20 Посмотреть сообщение
выражение1 - пустое, я нуб и не понимаю какой в этом смысл, разъясните, пожалуйста.
Нету объявления счётчика. Вы объявили и инициализировали счётчик (переменную i) раньше. Нормальная запись. Что конкретно не понятно? Цикл while в понимании проблем не вызывает? Если не вызывает, то вот Вам для наглядности тот же самый цикл for, записанный в виде цикла while:
C++
1
2
3
4
5
6
выражение1;
while(выражение2)
{
    // какой-то полезный код
    выражение3;
}
0
2540 / 1199 / 358
Регистрация: 30.11.2013
Сообщений: 3,820
11.10.2015, 18:10 13
Цитата Сообщение от gru74ik Посмотреть сообщение
Я хз.
сейчас темку создам ) сам не понял почему блок инициализации что-то кому-то объязан.
0
201 / 137 / 88
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 18:10 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int main ()
    {
    int A[4][2];        //Точки, 4 - количество, 2 - х и y
    int fl;
    fl=0;
    for (int i=0; i<4; i++)
    {
        printf(" Vvedite koordinati tochki \n");
        scanf("%f %f",&A[i][1],&A[i][2]);
        if (A[i][1]<=0 || A[i][2]<=0){
            break;
            fl=1;}
            }
    if (fl==1)
        printf("Tochki ne lezat v pervom kvadrante \n");
    if (fl==0)
        printf("Tochki lezat v pervom kvadrante \n");
}
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
11.10.2015, 18:23 15
Olfy20, если на конкретном примере Вам будет понятнее, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    #include <iostream>
     
    int main()
    {
        const int LOOP_ENDS = 5;
     
        for (int i = 0; i < LOOP_ENDS; i++)
        {
            std::cout << "I know loops! I am " << i+1 << " step of loop for.\n";
        }
     
        int k = 0;
        while(k < LOOP_ENDS)
        {
            std::cout << "I know loops too! I am " << k+1 << " step of loop while.\n";
            k++;
        }
     
        return 0;
    }
Добавлено через 5 минут
Olfy20, а теперь смотрите, можно ведь объявление и инициализацию счётчика вынести выше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    #include <iostream>
     
    int main()
    {
        const int LOOP_ENDS = 5;
 
        int i = 0;    
        for ( ; i < LOOP_ENDS; i++)
        {
            std::cout << "I know loops! I am " << i+1 << " step of loop for.\n";
        }
     
        return 0;
    }
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
11.10.2015, 18:26  [ТС] 16
Нашел решение. Теперь бы трассировку написать, эх... Окончательный вариант:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
int main ()
    {
    int A[4][2];        //Точки, 4 - количество, 2 - х и y
    int fl;
    fl=0;
    for (int i=1; i<5; i++)
    {
        printf(" Vvedite koordinati tochki \n");
        scanf("%f %f",&A[i][1],&A[i][2]);
        if (A[i][1]<=0 || A[i][2]<=0){
            fl=1;
            break;
            }
            }
    if (fl==1)
        printf("Tochki ne lezat v pervom kvadrante \n");
    if (fl==0)
        printf("Tochki lezat v pervom kvadrante \n");
    system ("pause");     
    return 0; 
    }
Добавлено через 1 минуту
Спасибо, gru74ik, я понял.
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
11.10.2015, 18:26 17
Olfy20, можно вообще цикл for соорудить полностью по подобию цикла while:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main()
{
    const int LOOP_ENDS = 10;
 
    int i = 0;
    for ( ; i < LOOP_ENDS; )
    {
        std::cout << "Hi! I know loops! I am " << i+1 << " step of loop for.\n";
        i++;
    }
 
    return 0;
}
0
201 / 137 / 88
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 18:27 18
C++
1
int A[4][2];
C++
1
for (i=1; i<5; i++)
У вас i за границу массива выходит.
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 42
11.10.2015, 18:30  [ТС] 19
Почему же выходит, если меньше, а не меньше или равно?
0
201 / 137 / 88
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 18:31 20
Потому что массив начинается с 0, а не с 1, и при размере 4 последний член будет под номером 3.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2015, 18:31

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Ограничение на ввод чисел и проверка чисел
решить квадратное уравнение. Сделала задачу, а преподаватель сказал, что это слишком легко и...

Проверка чисел
Здравствуйте форумчане. Вообщем это код для проверки введенного значения, но проверяет только целые...

Проверка чисел
Помогите создать программу проверяющую, является ли целое число простым.

Проверка чисел
Всем доброго времени суток и с Наступающим Новым Годом!!! Начал изучать javaScript и наткнулся на...


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

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

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