Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 9 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 17.08.2003
Откуда: Новосибирск
синтаксис функций подскажите, что да как...


Последний раз редактировалось BERSERKER 13.10.2004 13:40, всего редактировалось 2 раз(а).


Партнер
 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Синтаксис очень простой
<тип> имя( [ <тип > arg [,<тип > arg...]]) {
<тело>
[ return [<значение>] ];
}

_________________
Цель жизни - d20 по жизни...


 

Member
Статус: Не в сети
Регистрация: 17.08.2003
Откуда: Новосибирск
Помогите плиз найти ошибку, в функции Raschet переменная u_d не хочет возвращаться (предпоследняя строка). Программа просто виснет после расчёта одного значения . Что делать?

#include <stdio.h>
#include <conio.h>
#include <math.h>

float Raschet( float, float, float, float, float );
void Vivod( float Ud[100] [100], float U[100], float Io[100], int Un, int In );

void main( void )
{
float A, a = 0, E = 0, R = 0;
float U_min = 0, U_max = 0, Io_min = 0, Io_max = 0;
float temp = 0, stepU = 0, stepI = 0;
float Io[100] =
{
0
}, U[100] =
{
0
};
float I[100] [100];
float Ud[100] [100];
int i = 0, j = 0, N_U = 0, N_Io = 0;

do
{
printf( "Vvedite U_min: " );
scanf( "%f", & U_min );
printf( "Vvedite U_max: " );
scanf( "%f", & U_max );
printf( "Vvedite Io_min: " );
scanf( "%f", & Io_min );
printf( "Vvedite Io_max: " );
scanf( "%f", & Io_max );
printf( "Vvedite N_U: " );
scanf( "%f", & N_U );
printf( "Vvedite N_Io: " );
scanf( "%f", & N_Io );
printf( "Vi verno vveli znacheniya? 1-net, 0 -da\n" );
scanf( "%d", & A );
}
while ( A );

do
{
printf( "Vvedite a:" );
scanf( "%f", & Io );
printf( "Vvedite E: " );
scanf( "%f", & E );
printf( "Vvedite R: " );
scanf( "%f", & R );
printf( "Vvod a, E, R veren? 1-net, 0 -da\n" );
scanf( "%d", & A );
}
while ( A );

temp = U_min;
stepU = ( U_max - U_min ) / ( N_U - 1 );
for ( i = 1; i <= N_U; i++ )
{
U[i] = temp;
temp += stepU;
}

temp = Io_min;
stepI = ( Io_max - Io_min ) / ( N_Io - 1 );
for ( i = 1; i <= N_Io; i++ )
{
Io[i] = temp;
temp += stepI;
}


for ( j = 1; j <= N_Io; j++ )
for ( i = 1; i <= N_U; i++ )
Ud[i] [j] = Raschet( Io[j], U[i], E, R, a );

Vivod( Ud, U, Io, N_U, N_Io );

getch();
}

void Vivod( float Ud[100] [100], float U[100], float Io[100], int Un, int In )
{
int i, j;

printf( "\n \n" );
printf( "Io |U=" );
for ( i = 1; i <= Un; i++ )
printf( "%6.2f |", U[i] );
printf( "\n" );
printf( "---------" );
for ( i = 1; i <= Un * 8; i++, printf( "-" ) );
printf( "\n" );
for ( j = 1; j <= In; j++ )
{
printf( "%6.2f| ", Io[j] );
for ( i = 1; i <= Un; i++ )
printf( "%6.4f |", Ud[i] [j] );

printf( "\n" );
}
printf( "\n" );
}

float Raschet( float Io, float U, float E, float R, float a )
{
float i;
float u_d;

i = ( Io * E ) / ( U + Io * R );
if ( i < Io )
u_d = ( i * U ) / Io;

else
{
i = ( Io + ( E - U ) * tan( a ) ) / ( R * tan( a ) + 1 );
u_d = i - Io / tan( a ) + U;
}
return u_d;
}


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
float Raschet( float Io, float U, float E, float R, float a )
{
float i;
float u_d = 0;

Присвой u_d какое-либо начальное значение.

P.S. А еще очень сильно помогает ключик -Wall (пример для gcc) и не игнорируйте предупреждения!


Последний раз редактировалось Avaddon 13.10.2004 14:22, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 31.03.2004
Откуда: Тамбов-Москва
Стопудово, неинициализирована переменная u_d, в ее ячейке памяти при обращении к функции хранится какой то хлам..

_________________
Ку! - Летим. - Тормози! - Да как я могу затормозить когда ты всю тормозную жидкость выпил, алкаш!


 

Member
Статус: Не в сети
Регистрация: 17.08.2003
Откуда: Новосибирск
господа, это не помогает - не знаю что и делать?


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
BERSERKER
Отладчик в руки и вперед.

_________________
Цель жизни - d20 по жизни...


 

Очень небезопасное программирование...
например, scanf ( "%d" , &A ) - сканируешь в целое число, но число то тут float...
На одной машине сожрёт, на другой - кранты.
_Куча_ мест, где при неверных данных зависнет и не пикнет при этом...
Ты уверен, что проблема именно с возвратом значения?
Неверно передать данные - рас плюнуть.
Нет проверок на деление на 0,
Циклы в массивах начинаются со второго элемента...
Рекомендую: в начале каждой функции пишешь printf(....), печатающий все входные параметры.

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


 

Member
Статус: Не в сети
Регистрация: 04.02.2004
Откуда: Москва|СВАО
BERSERKER
Сделайте 5-6 Printf(u_d) - раскидайте их по всей программе, инициализмруйте u_d разными числами и смотрите в какой момент происходит ошибка, попробуйте возвращать конкретное значение и выводить его.

_________________
Счастье - это когда тебя понимают.
Разыскиваю (куплю) оригинальный USB-kit для Chaintech 5AGM2 (подробности в Л.С.).


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 9 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan