Вопрос по Си

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Вопрос по Си

Сообщение Pika4u »

Извините, если я попал не в тот форум. Нужен совет по Си. Мне необходимо, не только, что бы программа при вводе определённой переменной вычисляла по введённой формуле, но и чтобы при определённых значениях переменной считала по определённой формуле. Как это реализовать?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Digikey
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн мар 08, 2010 02:59:04

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

Сообщение 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
}
kospov
Открыл глаза
Сообщения: 71
Зарегистрирован: Ср янв 20, 2010 20:55:10
Откуда: Новосибирск
Контактная информация:

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

Сообщение 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; }
}


Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

kospov, тогда уж рассказали бы и про обработку по умолчанию, а то из вашегоо примера не ясно, что будет делать программа, если число окажется не тем, для которых вы задали "типа какой-то код"...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

int x;
int y;
int z;
затем выводим-введите переменную, и водим переменную
if(x<10) // условие
y=100
if(120>x>100)
y=169
примерно так?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

Помогите ещё раз. Не могу разобраться с циклами. Для чего нужны циклы. Для чего нужны операторы while и for?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Циклы нужны для организации повторяющихся процессов (например постоянный опрос чего-либо или вычисление функции в каком-либо интервале).

Оператор WHILE служит для организации цикла с условием, то есть цикл будет выполняться пока истинно (или ложно) определенное условие.
Оператор FOR служит для задания заранее определенного количества повторений цикла, как правило для управления служит целочисленная переменная, для которой после слова FOR задан диапазон значений.
Digikey
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн мар 08, 2010 02:59:04

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

Сообщение 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++. Руководство для начинающих
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

спасибо. Ещё вопрос-есть ли в С++ такие команды, чтобы при определённом значении переменной открывалась определённая программа?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

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

Сообщение РадиоЛоматель »

Как то это странно. Вы об основах спрашиваете (кроме запуска программы). Попробовали бы в гугле хоть найти какой-то учебник, почитать самостоятельно... Так вы язык программирования никогда не выучите.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

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

Сообщение РадиоЛоматель »

Пожалуйста:

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

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

#include "windows.h"

Перед всем кодом(вверху файла)
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

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

Сообщение kolobok0 »

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


правильный ответ НЕТ (если отвечать на поставленный вопрос).
Есть в WinAPI (если речь про форточки).
в самом языке нет (как нет и в сях, азме...)

удачи вам
(круглый)
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

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

Сообщение РадиоЛоматель »

^ Во! Точно. Забыл сказать про это.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

Спасибо. Ещё вопрос. По команде case. Она при определённом значении переменной выполняет программу по определённому пути. Но переменная может быть только целым числом. а как сделать, чтобы переменная могла быть с точкой(целая и дробная часть), но и чтобы выполнялась программа?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Digikey
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн мар 08, 2010 02:59:04

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

Сообщение Digikey »

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

switch()/case - только для целочисленных аргументов, для формата с плавающей запятой (целая и дробная часть), например, так:

float x;

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

Эти книги все еще доступны в сети:
Керниган, Ричи. Язык C
Шилдт C++. Руководство для начинающих
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

спасибо.А можно так:
float x;
if(x==100.6)
{
//здесь то что нужно сделать
}
??? можно ли так сделать?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

Спасибо. Уже переделал
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение 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 в коде?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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

Сообщение Pika4u »

Вопрос решился. Отладил я этот блок как отдельную программу. Оказалось, везде где dNre3 надо было поставить вместо =поставить ==.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»