Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте! я только начинаю изучать азы Си подскажите пожалуйста!
Задача такая: программа должна сгенерировать 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2015, 16:27
Ответы с готовыми решениями:

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

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

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

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

11
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
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
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
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 23
09.01.2015, 17:05  [ТС] 4
Байт спасибо про do white понял!
а про sleep() никто не ответил почему за держка в миллисекундах не работает?
0
0 / 0 / 1
Регистрация: 10.10.2014
Сообщений: 3
09.01.2015, 17:08 5
Вы указали задержку 1000 миллисекунд, что равно 1 секунде!!!
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
09.01.2015, 17:11 6
Sleep() http://msdn.microsoft.com/en-u... 85%29.aspx
sleep() http://www.opennet.ru/man.shtm... &russian=0
usleep() http://linux.die.net/man/3/usleep
0
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
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
09.01.2015, 17:21 8
Лучший ответ Сообщение было отмечено Andrey-1302 как решение

Решение

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

Решение

Потому что <unistd.h> не подключен, наверное. Именно там описана функция sleep
0
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2015, 19:16
Помогаю со студенческими работами здесь

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

Сгенерировать 10 случайных чисел в диапазоне от 0 до 1, чтобы в сумме получить 1
Добрый день подскажите как выполнить это

Сгенерировать 10 случайных значений в диапазоне от -30 до 150 и вывести кратные 3-м
Помогите делать задание, пожалуйста: сгенерировать 10 случайных значений в диапазоне от -30 до 150...

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

Сгенерировать 4000 целых случайных чисел в диапазоне от -3000 до 7000 и записать их в текстовый файл
Помогите плиз!!! Заранее спасибо!!!!!! №1. Сгенерировать 4000 целых случайных чисел в диапазоне...

Сгенерировать 10 случайных чисел в диапазоне от -10 до 10. Вывести на экран количество положительных чисел
Помогите написать программку в Паскале, что сгенерирует 10 случайных чисел в диапазоне от -10 до...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru