Страница 1 из 3

Вопрос по Си

Добавлено: Чт апр 08, 2010 19:11:17
Pika4u
Извините, если я попал не в тот форум. Нужен совет по Си. Мне необходимо, не только, что бы программа при вводе определённой переменной вычисляла по введённой формуле, но и чтобы при определённых значениях переменной считала по определённой формуле. Как это реализовать?

Re: Вопрос по Си

Добавлено: Чт апр 08, 2010 20:43:56
Digikey
Если я правильно догадался, о чем Вы спрашиваете...

Код: Выделить всё

//---------------------------------------------------------
/* Variables */
int Perem;
int Znach;

/* Prototypes */
int formula_1(int x);
int formula_2(int x);
int formula_3(int x);
//---------------------------------------------------------

//...
if(Perem < 10)               // подставить нужное условие
   Znach = formula_1(Perem);
else if(Perem < 100)         // подставить нужное условие 
   Znach = formula_2(Perem);
else
   Znach = formula_3(Perem);
//...

//---------------------------------------------------------
int formula_1(int x)
{
   return x+10;   // подставить нужную формулу №1
}
//---------------------------------------------------------
int formula_2(int x)
{
   return x-10;   // подставить нужную формулу №2
}
//---------------------------------------------------------
int formula_3(int x)
{
   return x-100;  // подставить нужную формулу №3
}

Re: Вопрос по Си

Добавлено: Чт апр 08, 2010 20:45:51
kospov
Вот такой конструкцией удобно пользоваться:

unsigned char i; //твоя переменная

switch(i){
case 124: { //при этом значение переменной i ,будет выполнятся код.
//тут типа первый код,

break; }

case 100: { //при этом значение переменной i ,будет выполнятся код.
//тут типа второй код,

break; }

case 2: { //при этом значение переменной i ,будет выполнятся код.
//тут типа третий код,

break; }

case 37: { //при этом значение переменной i ,будет выполнятся код.
//тут типа четвёртый код,

break; }

case 54: { //при этом значение переменной i ,будет выполнятся код.
//тут типа пятый код,
break; }
}



Re: Вопрос по Си

Добавлено: Чт апр 08, 2010 23:06:04
ARV
kospov, тогда уж рассказали бы и про обработку по умолчанию, а то из вашегоо примера не ясно, что будет делать программа, если число окажется не тем, для которых вы задали "типа какой-то код"...

Re: Вопрос по Си

Добавлено: Пт апр 09, 2010 08:17:06
Pika4u
int x;
int y;
int z;
затем выводим-введите переменную, и водим переменную
if(x<10) // условие
y=100
if(120>x>100)
y=169
примерно так?

Re: Вопрос по Си

Добавлено: Пт апр 09, 2010 15:56:24
Pika4u
Помогите ещё раз. Не могу разобраться с циклами. Для чего нужны циклы. Для чего нужны операторы while и for?

Re: Вопрос по Си

Добавлено: Пт апр 09, 2010 16:07:06
Engineer_Keen
Циклы нужны для организации повторяющихся процессов (например постоянный опрос чего-либо или вычисление функции в каком-либо интервале).

Оператор WHILE служит для организации цикла с условием, то есть цикл будет выполняться пока истинно (или ложно) определенное условие.
Оператор FOR служит для задания заранее определенного количества повторений цикла, как правило для управления служит целочисленная переменная, для которой после слова FOR задан диапазон значений.

Re: Вопрос по Си

Добавлено: Пт апр 09, 2010 23:33:19
Digikey
if(x<10) // условие
y=100
if(120>x>100)
y=169
примерно так?
if(120>x>100) - Это неправильно!

Правильно так:
if(x<10) // условие
y=100;
if((x>100) && (x<120))
y=169;
Не могу разобраться с циклами
Эти книги доступны в сети:
Керниган, Ричи. Язык C
Шилдт C++. Руководство для начинающих

Re: Вопрос по Си

Добавлено: Сб апр 10, 2010 11:29:45
Pika4u
спасибо. Ещё вопрос-есть ли в С++ такие команды, чтобы при определённом значении переменной открывалась определённая программа?

Re: Вопрос по Си

Добавлено: Сб апр 10, 2010 13:22:58
РадиоЛоматель
Как то это странно. Вы об основах спрашиваете (кроме запуска программы). Попробовали бы в гугле хоть найти какой-то учебник, почитать самостоятельно... Так вы язык программирования никогда не выучите.

Re: Вопрос по Си

Добавлено: Сб апр 10, 2010 13:30:58
РадиоЛоматель
Пожалуйста:

WinExec("c:\\LCD20.exe",SW_SHOW); где "c:\\LCD20.exe" путь к приложению

Но перед этим нужно включить файл "windows.h" Вот так:

#include "windows.h"

Перед всем кодом(вверху файла)

Re: Вопрос по Си

Добавлено: Сб апр 10, 2010 14:18:25
kolobok0
Pika4u писал(а):спасибо. Ещё вопрос-есть ли в С++ такие команды, чтобы при определённом значении переменной открывалась определённая программа?
правильный ответ НЕТ (если отвечать на поставленный вопрос).
Есть в WinAPI (если речь про форточки).
в самом языке нет (как нет и в сях, азме...)

удачи вам
(круглый)

Re: Вопрос по Си

Добавлено: Сб апр 10, 2010 14:24:03
РадиоЛоматель
^ Во! Точно. Забыл сказать про это.

Re: Вопрос по Си

Добавлено: Сб апр 10, 2010 18:46:31
Pika4u
Спасибо. Ещё вопрос. По команде case. Она при определённом значении переменной выполняет программу по определённому пути. Но переменная может быть только целым числом. а как сделать, чтобы переменная могла быть с точкой(целая и дробная часть), но и чтобы выполнялась программа?

Re: Вопрос по Си

Добавлено: Вс апр 11, 2010 03:19:25
Digikey
Pika4u писал(а):Спасибо. Ещё вопрос. По команде case. Она при определённом значении переменной выполняет программу по определённому пути. Но переменная может быть только целым числом. а как сделать, чтобы переменная могла быть с точкой(целая и дробная часть), но и чтобы выполнялась программа?
switch()/case - только для целочисленных аргументов, для формата с плавающей запятой (целая и дробная часть), например, так:

float x;

if((x>100.5) && (x<100.6))
{
// здесь сделать что нужно
}

Эти книги все еще доступны в сети:
Керниган, Ричи. Язык C
Шилдт C++. Руководство для начинающих

Re: Вопрос по Си

Добавлено: Вс апр 11, 2010 07:09:58
Pika4u
спасибо.А можно так:
float x;
if(x==100.6)
{
//здесь то что нужно сделать
}
??? можно ли так сделать?

Re: Вопрос по Си

Добавлено: Вс апр 11, 2010 10:19:02
ARV
Pika4u писал(а):спасибо.А можно так:
float x;
if(x==100.6)
{
//здесь то что нужно сделать
}
??? можно ли так сделать?
так сделать можно, но надо четко представлять последствия.
дробные числа (т.е. числа в формате с плавающей точкой - float) никогда почти не бывают так точно выражены, как вы думаете, т.е. если в результате ваших вычислений переменная х окажется равной 100.6000001 - это будет не равно 100.6 и ваше условие не выполнится! поэтому проверка на попадание в диапазон значений с учетом допустимой для вашей задачи погрешности - это правильный подход, а проверка на однозначное равенство - неправильный.

Re: Вопрос по Си

Добавлено: Вс апр 11, 2010 10:59:51
Pika4u
Спасибо. Уже переделал

Re: Вопрос по Си

Добавлено: Вс апр 11, 2010 15:59:49
Pika4u
Блин. Глючит программа.
if (nNcnort=4)
{
if (dNre3=14)
{
nNo4ki=70;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=13)
{
nNo4ki=65;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=12)
{
nNo4ki=60;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=11)
{
nNo4ki=55;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=10)
{
nNo4ki=50;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=9)
{
nNo4ki=45;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=8)
{
nNo4ki=41;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=7)
{
nNo4ki=37;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=6)
{
nNo4ki=33;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=5)
{
nNo4ki=29;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=4)
{
nNo4ki=25;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=3)
{
nNo4ki=21;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=2)
{
nNo4ki=17;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
if (dNre3=1)
{
nNo4ki=1;
cout<<"Bawi o4ki: ";
cout<<nNo4ki;
}
}
при аставке этого кода программа(она учитывает результаты соревнований) начинает глючить. Остальной код работает нормально(отладил поблочно). И вообще-есть ограничения на кол-во if в коде?

Re: Вопрос по Си

Добавлено: Вс апр 11, 2010 16:14:11
Pika4u
Вопрос решился. Отладил я этот блок как отдельную программу. Оказалось, везде где dNre3 надо было поставить вместо =поставить ==.