Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Andrey-1302
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
1

Программа должна сгенерировать 2 случайных числа в диапазоне от 2 до 9

09.01.2015, 16:27. Просмотров 1106. Ответов 11
Метки нет (Все метки)

Здравствуйте! я только начинаю изучать азы Си подскажите пожалуйста!
Задача такая: программа должна сгенерировать 2 случайных числа в диапазоне от 2 до 9 , потом вывести их на экран и далее пользователь должен ввести ответ чему будет равно произведение этих чисел. таблица умножения...

Казалось бы всё просто , но оператор While отказывается напрочь работать и условия в скобках не проверяются , даже если оставить только 1 из 4х условий!
это первый вопрос!. на свою голову пока пытался отладить программу решил ввести задержку времени sleep(1000);
почему то задержка работает в секундах а не в милисекундах как должна((((

вот текст программы:
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
#include <time.h>
 
int main()
{
setlocale(0,"");
int x, y , z;
x=1; y=1;
puts("Программа проверки таблицы умножения:");
system ("pause");
srand(time(NULL));
m:
while (x>=2&&x<=9&&y>=2&&y<=9)
{
sleep(5);
x=rand()%10;
printf("x=%d ",x);
y=rand()%10;
printf("y=%d",y);
}
printf("Введите результат выражения %d*%d\n",x,y);
scanf("%2d",&z);
x*y==z&&printf("\nВерно!!!");
x*y!=z&&printf("\nне верно!!!");
goto m;
getch();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2015, 16:27
Ответы с готовыми решениями:

Написать программу, которая должна сгенерировать массив из 1000000 случайных целых чисел и записать их в файл
Задание. Написать программу, которая должна сгенерировать массив и з 1000000 (один миллион)...

Сгенерировать случайные числа в диапазоне от 1 до 20
Задача такова: Нужно написать рендум чисел в диапазоне например от 1 до 20 (не имеет значения). С...

Сгенерировать случайные действительные числа в заданном диапазоне
Сгенерировать число равномерно от 0 до 1-это у меня получается: int main() { double a = {...

Сгенерировать 10 случайных целых чисел в диапазоне от N до M
Сгенерировать 10 случайных целых чисел в диапазоне от N до M var n,m,a,i:integer; begin...

Сгенерировать два массива A и B случайных чисел в диапазоне [0,55]
Сгенерировать два массива A и B случайных чисел в диапазоне . Генерацию осуществить с помощью...

11
Algirdas
0 / 0 / 1
Регистрация: 10.10.2014
Сообщений: 3
09.01.2015, 16:37 2
А так:
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <time.h>
 
int main()
{
    setlocale(0, "");
    int x, y, z;
    x = 1; y = 1;
    puts("Программа проверки таблицы умножения:");
 
    srand(time(NULL));
    x = rand() % 10;
    y = rand() % 10;
 
    if (x >= 2 && x <= 9 && y >= 2 && y <= 9)
    {
 
        
        printf("x=%d ", x);
        
        printf("y=%d", y);
    }
    printf("Введите результат выражения %d*%d\n", x, y);
    scanf("%2d", &z);
    x*y == z&&printf("\nВерно!!!");
    x*y != z&&printf("\nне верно!!!");
 
}
goto. getch не обязательны.
system(pause) Вы ставите очень рано. Нужно в конце или вообще не ставить.
вместо цикла лучше if т.к. в цикле Вы никаких действий с числами не делаете и происходит зацикливание.
1000 милисекунд == 1 секунда

Добавлено через 31 секунду
Числа от 1 до 31- лишние
0
Байт
Эксперт C
20467 / 12992 / 2733
Регистрация: 24.12.2010
Сообщений: 27,183
09.01.2015, 16:50 3
Цитата Сообщение от Andrey-1302 Посмотреть сообщение
x*y==z&&printf("\nВерно!!!");
x*y!=z&&printf("\nне верно!!!");
Любопытная конструкция. Работает, однако.
Цитата Сообщение от Andrey-1302 Посмотреть сообщение
while (x>=2&&x<=9&&y>=2&&y<=9)
Сначала проверяется условие, а уж если оно выполнено, выполняется тело. У тебя же x=1, y=1, условие не выполняется и переменные не меняются.
Надо использовать цикл do ... while
0
Andrey-1302
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
09.01.2015, 17:05  [ТС] 4
Байт спасибо про do white понял!
а про sleep() никто не ответил почему за держка в миллисекундах не работает?
0
09.01.2015, 17:05
Algirdas
0 / 0 / 1
Регистрация: 10.10.2014
Сообщений: 3
09.01.2015, 17:08 5
Вы указали задержку 1000 миллисекунд, что равно 1 секунде!!!
0
nxnx
Формучанин
362 / 293 / 41
Регистрация: 02.11.2010
Сообщений: 1,234
09.01.2015, 17:11 6
Sleep() http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
sleep() http://www.opennet.ru/man.shtml?topic=sleep&category=3&russian=0
usleep() http://linux.die.net/man/3/usleep
0
Andrey-1302
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
09.01.2015, 17:16  [ТС] 7
я и спрашиваю почему 1000 милисекунд не равно 1 секунде то есть sleep(1000) = 1000 секунд у меня
если ставлю sleep(10 он ругается а если sleep(5) или sleep(10) то он задерживает на 5 и 10 секунд соответственно

Байт про do white понял!
Но тоже не совсем работает тогда он выходит из цикла с числом не удовлетворяющим условию: то есть с 0)

\ссылки на иностранные страницы не кидайте) я по английский чуть больше чем в пределах школьной программы знаю)
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27200 / 18190 / 7203
Регистрация: 22.10.2011
Сообщений: 32,059
Записей в блоге: 6
09.01.2015, 17:21 8
Лучший ответ Сообщение было отмечено Andrey-1302 как решение

Решение

Цитата Сообщение от Andrey-1302 Посмотреть сообщение
то есть sleep(1000) = 1000 секунд у меня
Потому что sleep и Sleep - совершенно разные функции. Первая задерживает выполнение на секунды, а вторая, из WinAPI, на миллисекунды...
1
Andrey-1302
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
09.01.2015, 17:25  [ТС] 9
Почему тогда компилятор не даёт вводить sleep(1) ?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27200 / 18190 / 7203
Регистрация: 22.10.2011
Сообщений: 32,059
Записей в блоге: 6
09.01.2015, 17:33 10
Лучший ответ Сообщение было отмечено Andrey-1302 как решение

Решение

Потому что <unistd.h> не подключен, наверное. Именно там описана функция sleep
0
Andrey-1302
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
09.01.2015, 18:43  [ТС] 11
Переписал программу как мог) теперь наполовину работает и задержка радотает Sleep() спасибо,

НО While опять неработает то есть выдаются значения включая 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
26
27
28
29
30
31
32
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
#include <time.h>
 
int main()
{
    setlocale(0,"");
    int x, y , z;
    puts("Программа проверки таблицы умножения:");
    system ("pause");
    m:
    x=0; y=0;   
    srand(time(NULL));  
    
        while (!x&&!y)
    {   Sleep(1000);
    x=rand()%10;
    printf("x=%d ",x);
    y=rand()%10;
    printf("y=%d",y);
    }
    
        printf("\nВведите результат выражения %d*%d\n",x,y);
    scanf("%2d",&z);
    x*y==z&&printf("\nВерно!!!\n");
    x*y!=z&&printf("\nГ*не верно!!!\n");
    goto m;
    getch();    
}
Добавлено через 1 час 6 минут
вообщем понятно как он думает ... нули смог исключить ) только разделив на 2 цикла. единицы так и не хочет через While но принцип понятен... додумаю...
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
int main()
{
//  setlocale(0,"");
system ("chcp 1251>0");
    int x, y , z;
    puts("Программа проверки таблицы умножения:");
    system ("pause");
    m:
    x=0; y=0;   
    srand(time(NULL));  
 
    while (!x)
    {   
    x=rand()%10;
    printf("x=%d ",x);
    }
    
    while (!y)
    {   
    y=rand()%10;
    printf("y=%d",y);
    }
    
    Sleep(1000);
    printf("\nВведите результат выражения %d*%d\n",x,y);
    scanf("%2d",&z);
    fflush(stdin);
    x*y==z&&printf("\nВерно!!!!");
    x*y!=z&&printf("\nне верно!!!");
    goto m;
    getch();    
}
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
09.01.2015, 19:16 12
Старый индейский способ засыпать меньше, чем на секунду
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 <time.h>
#include <sys/select.h>
 
#define SLEEP_TIME (250000)
 
void slowprint(const char * s) {
    while ( *s ) {
        struct timeval t = { .tv_sec = 0, .tv_usec = SLEEP_TIME };
        select(0, NULL, NULL, NULL, &t);
        printf("%c", *s++);
        fflush(stdout);
    }
}
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("> ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        slowprint(buf);
    
    return 0;
}
0
09.01.2015, 19:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2015, 19:16

Сгенерировать 7 случайных чисел в диапазоне от 3 до 33. Вывести их на экран.
как написать вот такую программку? Сгенерировать 7 случайных чисел в диапазоне от 3 до 33....

Программа должна искать все числа в диапазоне от a до b, содержащих в десятичной записи не более двух нулей
Программа должна искать все числа в диапазоне от a до b, которые содержат не более 2 нулей в...

При вводе числа в диапазоне от 0 до 50 программа должна выдать сообщение о количестве слоников(с правильным окончанием)
Составить программу &quot;считывающую&quot; слоников. При вводе числа в диапазоне от 0 до 50 программа должна...


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

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

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