Консультация № 188407
11.12.2015, 15:30
0.00 руб.
0 13 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Я работаю с программой code blocks для програмирования на языке си. мне нужно написать программу в которую вводились бы два любых числа и если произведение последних цифр данных чисел будут больше 50 то программа должна выдать "1" если произведение будет меньше 50 то программа должна выдать"0". сделать это нужно с поможью логических выражений( && || !). я написала данную программу для чисел int, а что если числа будут float? вот моя программа:
#include<stdio.h>
void main (void)
{

int a,b,c;
printf("enter two numbers\n");
scanf("%d %d",&a,&b);
c=(a%10)*(b%10);
c=!(c<=50);
printf("the resuilt is %d",c);



}

Обсуждение

давно
Посетитель
7438
7205
11.12.2015, 15:49
общий
Адресаты:
Здравствуйте!
Как вариант: вводите строку, и обрабатываете последний символ (или предпоследний, если закончится точкой)
Единственно, надо будет проверить, является ли строка числом...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399291
2
11.12.2015, 16:18
общий
спасибо большое за вариант
давно
Посетитель
7438
7205
11.12.2015, 16:27
общий
Адресаты:
Да пожалуйста! Покажете, что получится?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399291
2
11.12.2015, 18:30
общий
конечно, как только закончу отправлю
давно
Старший Модератор
31795
6196
12.12.2015, 00:03
общий
Адресаты:
Ещё один вариант:
Вводите как число. С целой частью понятно. С дробной: Отбрасываете целую часть, пока дробь больше нуля - умножаете на 10 и снова отбрасываете целую часть. Последняя целая часть перед нулем будет последней цифрой.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
12.12.2015, 00:24
общий
Ещё добавлю, работать нужно с абсолютом.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
12.12.2015, 00:53
общий
12.12.2015, 00:56
Адресаты:
Нельзя так работать с вещественными числами. Легко можно получить далеко не то, что требуется
Например, вводим 1. , а реально получаем, что-то типа, 0.999999983 Причем, в конце может оказаться все, что угодно!
Вещественные числа - приближенные числа! Хотя не исключен вариант, что получим то, что требуется... По этой причине нельзя сравнивать вещественные числа на совпадение, надо сравнивать их разность с неким маленьким числом
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
12.12.2015, 01:11
общий
Адресаты:
Я только предложил вариант.
Я прекрасно понимаю, что с такими числами можно работать только в пределах допустимой точности. Но как вариант это имеет право "жить".
Также я прекрасно понимаю, что ни один пользователь не будет вводить число с точностью до сотого знака. Лень батенька однако.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
12.12.2015, 02:12
общий
12.12.2015, 02:12
Адресаты:
Да там не надо много знаков, достаточно ввести число, не являющееся степенью двойки.
Например, 0.77 После того, как первую 7 уберем, останется 0.69999
Только что погонял в С
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
12.12.2015, 11:44
общий
Адресаты:
Эх, Игорь Витальевич, такую идею на корню убили.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
13.12.2015, 20:25
общий
Адресаты:
Получается или нет? Помощь не требуется?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.12.2015, 04:29
общий
это ответ
Здравствуйте, nana-1992!
Задачу можно решать разными способами.
Предлагаю следующее:
Ввод строки сделано посимвольно, с проверкой на допустимые коды
Далее, идет разбор введенной строки с проверкой на синтаксис
Ну и выводится результат сравнения.
[code h=200]
#include <stdio.h>
#include <conio.h>

//Функция ввода числовой строки
// Разрешены пробелы, точка и цифры
// Для вытирания знаков используется Backspace
// Ввод заканчивается Enter-ом
// Параметры: адрес буфера и длина буфера, включая завершающий 0
void GetNumStr(char *pstr, int len)
{
int i = 0;
bool fContinue = true;
char ch;

while(fContinue) //вводим, пока true
{
switch(ch = _getch()) //ждем символ с консоли
{
case 0x0d: //Enter - завершение ввода
pstr[i] = 0; //закрываем строку нулем
putch((char)'\n'); //на экране переходим на новую строку
fContinue = false; //выходим из цикла while
break;
case 0x08: //Backspace - вытираем последний символ
if (i==0)
break; //при условии, если что-то есть
else
{
i--; //уменьшаем индекс
putch(ch); //08 - вернемся на 1 позицию назад
ch = ' '; //выведем пробел
putch(ch);
ch = 0x08; //и еще раз вернемся назад, т.к. break отсутствует,
} // то отработается putch, который дальше
case ' ':
case '.':
case '0':
case '1': //разрешенные символы
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (i<len-1) //сначала проверим, не переполнен ли буфер?
{
putch(ch); //на экран
pstr[i++] = ch; //и в буфер
}
}
}
}

//функция ищет в строке последние цифры для двух чисел
//одновременно проверяет правильность формата
bool GetLastDigits(char *pstr, char *pnum1, char *pnum2)
{
bool fSelect = true; //true/false - обрабатывается первое/второе число
bool fNum1 = false; //true/false - найдена/не найдена хотя бы одна цифра первого числа
bool fPoint1 = false; //true/false - найдена/не найдена точка первого числа
bool fNum2 = false; //true/false - найдена/не найдена хотя бы одна цифра второго числа
bool fPoint2 = false; //true/false - найдена/не найдена точка второго числа
int i;

for(i=0; pstr[i]; i++)
{
if (fSelect) //какое обрабатываем число?
{
switch (pstr[i]) //первое
{
case ' ':
if (fNum1) //если есть цифры, то завершаем обработку первого числа
{ //найдем последнюю цифру
if(pstr[i-1] != '.') //если число не заканчивается точкой
*pnum1 = pstr[i-1]&0x0f;//то берем последнюю цифру, сделав число 0-9
else
*pnum1 = pstr[i-2]&0x0f;//иначе - предпоследнюю
fSelect = false; //готовы к обработке второго числа
}
break;
case '.':
if (fPoint1) //точка допустима только одна
return false; //уже была - ошибка!
fPoint1 = true; //помечаем
break;
default:
fNum1 = true; //есть цифра
}
}
else //второе число
{
switch (pstr[i])
{
case ' ': //по пробелу завершаем второе число
if (fNum2) //если есть цифры, то завершаем обработку второго числа
{ //найдем последнюю цифру
if(pstr[i-1] != '.')
*pnum2 = pstr[i-1]&0x0f; //аналогично первому
else
*pnum2 = pstr[i-2]&0x0f;
return true; //обе цифры найдены, успешно завершаемся
}
break;
case '.':
if (fPoint2)
return false; //проверим точку
fPoint2 = true;
break;
default:
fNum2 = true; //есть цифраво втором числе
}
}
}
if (fNum2) //прошли всю строку, пробелов в конце нет
{ //второе число есть
if(pstr[i-1] != '.')
*pnum2 = pstr[i-1]&0x0f; //найдем последнюю цифру
else
*pnum2 = pstr[i-2]&0x0f;
return true; //успешно завершаемся
}
else
return false; //как минимум, нет второго числа! Ошибка!
}

void main (void)
{
char str[128];
bool fOk;
char num1, num2;

do
{
printf("\nEnter two numbers: ");

GetNumStr(str, 128); //вводим строку

fOk = GetLastDigits(str, &num1, &num2); //проверяем на синтаксис и получаем две последние цифры
}while (!fOk);

printf("\nResult = %d\n", (num1*num2)>50); //выводим результат сравнения условия (1 или 0)

_getch();
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.12.2015, 04:30
общий
Адресаты:
Чего-то Вы пропали...
Сделал программу, как мне захотелось...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа