С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
#1

Уравнение больше реагирует на значение при инициализации переменной - C++

27.03.2013, 16:22. Просмотров 578. Ответов 18
Метки нет (Все метки)

Доброго времени дня! Возникла проблема не пойму в чем дело..
Вот кусок программы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double x,y;
...............
    else if (i==1){
 
            double r=1;
            float z=0.005,k=0.00124,t=0.01;
            
            Sanf1(k,t);
                scanf("%f",&r);
    printf("r is: %F\n",r);
            
    if((r!=0)||(k!=0)){
                x=((1/r)*(1-pow(e,((-r)*(t/k)))));

это Санф
C++
1
2
3
4
5
6
7
float Sanf1(float a,float b){
    
    printf("Vvedite 4isla: ");
    scanf("%f%f",&a,&b);
    
    return(a,b);
}
(в принцтпе Санф можно и поставить как void)
Но проблема остается..Первое..
Уравнение больше реагирует на значение при инициализации переменной.Если ставится Р=0, то значение выражение пишется как -1.#iNDO0 ...как-то так.
Принтф Р ИЗ показывает пустое место..
Такое впечатление что выводится знак ЕОФ.
В общем поделитесь своими подсказками.

Добавлено через 15 минут
Менял тип возвращаемого значения Санф1 на воид..Все так же, как-то результат , похоже, вообще глух к вводу с клавиатуры.Да и почему вообще не выводит значения Р..

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
float Sanf1(float a,float b){
    
    printf("Vvedite 4isla: ");
    scanf("%f%f",&a,&b);
    
    return(a,b);
}
Добавлено через 45 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    else if (i==1){
 
            double r=1;
            float z=0.005,k=0.00124,t=0.01;
            
            Sanf1(k,t);
                scanf("%f",&r);
    printf("r is: %F\n",r);
            
    if((r!=0)||(k!=0)){
                x=((1/r)*(1-pow(e,((-r)*(t/k)))));
                printf("x is:%f\n",x);
            }
Добавлено через 3 минуты
Интересно, есть ли форумы поживее?

 Комментарий модератора 
Используйте теги оформления кода. Называйте темы осмысленно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Уравнение больше реагирует на значение при инициализации переменной (C++):

Ошибка при инициализации статистической переменной. - C++
Ребят есть задание: В класс строки (пользовательский класс ) добавить статическую защищенную (protected) переменную "счетчик...

Указание типа переменной и ссылки при объявлении\инициализации - C++
Здравствуйте! Возник такой вопрос-зачем нужно указывать тип ссылки при ее инициализации? При объявлении обычной переменной, компилятору...

При отладке программы вылетает окошко с ошибкой: использование переменной без инициализации - C++
код: #include <iostream> #include <conio.h> int A,n,m; using namespace std; void poisk1(); void poisk2(); int main() ...

Для чего при инициализации переменной писать на конце числа первую букву типа? - C++
Например, long long a=123456789123344LL чем будет отличаться от long long a=123456789123344 ?

Переменной R присвоить значение 1, если длина вектора А больше длины вектора В, и значение 0 в противном случае - C++
Условие задачи: переменной R присвоить значение 1, если длина вектора А больше длины вектора В, и значение 0 в противном случае. Исходные...

Неполадка в инициализации переменной - C++
Добрый день, дорогие эксперты. По условию задачи я составил код, но после компиляции и ввода элементов массива выбивает ошибку(фото),...

18
egor2116
342 / 373 / 42
Регистрация: 20.01.2013
Сообщений: 1,132
27.03.2013, 16:36 #2
Ошибки в Sanf1 перепишете на
C++
1
2
3
4
5
void Sanf1(float & a,float & b){
 
printf("Vvedite 4isla: ");
scanf("%f%f",a,b);
}
Правте
C++
1
scanf("%f",r);
По видимому здесь
C++
1
if((r!=0)||(k!=0)){
нужно так
C++
1
if(r!=0 && k!=0){
А лучше приведите весь код и напишите задание которое нужно выполнить Дословно.
1
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
27.03.2013, 16:41 #3
Если Вы думаете, что все бросят свои дела и побегут быстрее Вам помогать, то Вы заблуждаетесь. Можете и подождать, раз Вам лень открыть любую книжку и прочитать, что "%f" это float, а не double

для double есть "%lf"

Добавлено через 3 минуты
Да и вообще тут ошибок больше чем правильного. Вы понимаете что происходит при
C
1
return (a,b)
0
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
27.03.2013, 16:41  [ТС] #4
Гроссмах, я и со спецификаторами игрался.Насчет лень открыть книгу - это не так..Просто уже голова болит, да и на тему ввода-вывода вроде перелистал и КиР и Прата...Страуструп есть но по-честному еще рано.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
27.03.2013, 16:43 #5
egor2116, В scanf нужнр передавать адреса памяти, в которые Вы хотите что-то записать.
1
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
27.03.2013, 16:44  [ТС] #6
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
33
34
35
36
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <string.h>
 
#define EOF -91
#define e 2.71
 
double Pint(double, double);
void Pint1();
double Sanf(double,double,double);
float Sanf1(float,float);
 
int  main(void){
    
    FILE* pf=NULL;
    char z[37];
    int i=0;
    pf=fopen("C:\\Documents and Settings..........\Spisok.txt","at+");
    
    for (i=0;i<27;i++){
        Pint1();
        printf("\t Laboratory\n");
        printf("\t Student1\n");
        if (pf!=NULL){
        fgets(z,sizeof(z),pf);
        printf (" %s\n",z);
    }
        
         
    else 
        printf("Failed\n"); 
        
double x,y;
.......
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
///////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////2_variant//////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
        else if (i==1){
 
            double r=1;
            float z=0.005,k=0.00124,t=0.01;
            
            Sanf1(k,t);
                scanf("%f",&r);
    printf("r is: %f\n",r);
            
    if((r!=0)||(k!=0)){
                x=((1/r)*(1-pow(e,((-r)*(t/k)))));
                printf("x is:%f\n",x);
            }
            else 
                printf ("FAiled1\n");
        
                scanf("%f",&z);
                if(((r*r)<100)|| (z>=0)) {
                y=(z*z)*asin((r)/pow((100-(r*r)),0.5));
                printf("y is:%f\n",y);
                }
                else
                    printf("Failed2\n");
                
Pint(x,y);      
        }
...
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
double Pint(double x,double y){
 
    printf("x is: %Lf\n\a",x);
    printf("y is: %Lf\n",y);
    
    int i=(27*2);
    
    while(i>0){
        printf("__");
        i--;
 
        if((i%27)==0){
            printf("\n");
        }
    }
    
    printf("\n");
    
    return(x,y);
}
void Pint1(){
 
    int i=(27*3);
 
while (i>0){
        printf("//");
        i--;
 
        if((i%27)==0){
            printf("\n");
        }
}
        printf("\n");
        
        return;
}
double Sanf(double a,double b,double c){
 
    printf("Vvedite 4isla: ");
    scanf("%f%f%f",&a,&b,&c);
    
    return(a,b,c);
}
float Sanf1(float a,float b){
    
    printf("Vvedite 4isla: ");
    scanf("%f%f",&a,&b);
    
    return(a,b);
}
вот вкратце....
0
KOPOJI
27.03.2013, 16:44
  #7

Не по теме:

Цитата Сообщение от Starter1 Посмотреть сообщение
Добавлено через 15 минут
Добавлено через 9 минут
Добавлено через 45 секунд
Добавлено через 3 минуты
Интересно, есть ли форумы поживее?
Итого: 27 минут 45 секунд.
Интересно, есть ли новички, которые читают правила при регистрации или после, или хотя бы мельком просматривают, вместо того, чтобы каждые две минуты писать "ну что там"?
Специально для Вас, читайте избранное
4.3 Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.
4.5 Не стоит ожидать, что на ваш вопрос ответят моментально. Ответ может быть дан как сразу, так и через некоторое время.
4.9 Используйте тэги форматирования текста для удобства восприятия ваших сообщений другими пользователями.

0
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
27.03.2013, 17:01  [ТС] #8
Ну простите за нетерпение....Просто были опасения, что тема переедет на вторую страницу и никто ее даже не увидит..

Добавлено через 3 минуты
C++
1
return(a,b);
попробую ответить.
Возвращает аргументы функции в Main/

Добавлено через 10 минут
Спасибо за помощь!Действительно надо было под double ставить спецификаторы Lf. С маленькой -эль- все равно не хотело работать..Просто разные автора по-разному пишут применяемость спецификаторов.Пишут например., что Ф просто для типа с точкой и для ДАБл и для ФЛОАт.И что специальных спе6цификаторов под ФЛОАТ нет(С.Прата)
Спасибо за помощь
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
27.03.2013, 17:03 #9
Цитата Сообщение от Starter1 Посмотреть сообщение
return(a,b);
попробую ответить.
Возвращает аргументы функции
Цитата Сообщение от Starter1 Посмотреть сообщение
вроде перелистал и КиР
Эту книгу нужно перечитывать внимательно и до полного осмысления. Оператор , (запятая) возвращает крайний справа операнд, то есть функция вернёт одно значение - b.
1
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
27.03.2013, 17:23  [ТС] #10
Понимаете, информации много, поэтому и хватаешь по верхам.Только при столкновении с чем-то конкретным начинаешь копать.Просто еще информация в разных книгах дается по-разному.А для ее адекватного осмысления возможно нужен опыт, которого у меня нет еще.

Добавлено через 2 минуты
easybudda,
Спасибо за полезный совет.
Почитаю подробнее.
интересует как сделать , чтобы возвращало два значения.

Добавлено через 13 минут
Оператор , (запятая) возвращает крайний справа операнд, то есть функция вернёт одно значение - b.

Не нашел.в КиР пишут:
Оператор reurn -это механизм возвращения значения из вызываемой функции в вызывающую.После return может идти любое выражение:
return выражение
По мере необходимости "выражение" преобразуется в тип, возвращаемый функцией согласно ее объявлению и определению.
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
27.03.2013, 17:24 #11
Цитата Сообщение от Starter1 Посмотреть сообщение
интересует как сделать , чтобы возвращало два значения.
Либо возвращать указатель на массив значений, либо передавать в функцию переменные по ссылке. Списком, как в PERL, не получится.
1
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
27.03.2013, 17:37  [ТС] #12
По КиР Ф упоминается как спецификатр ДАБЛ.(с.166)

Добавлено через 6 минут
Цитата Сообщение от easybudda Посмотреть сообщение
Либо возвращать указатель на массив значений, либо передавать в функцию переменные по ссылке. Списком, как в PERL, не получится.
Это вариант Егора?!
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
27.03.2013, 17:40 #13
Цитата Сообщение от Starter1 Посмотреть сообщение
Не нашел
Говорю же - внимательнее читайте. 3 глава, раздел "Циклы while и for"

Цитата Сообщение от Starter1 Посмотреть сообщение
в КиР пишут:
A pair of expressions separated by a comma is evaluated left to right, and the type and value of the result are the type and value of the right operand.
1
Starter1
4 / 4 / 3
Регистрация: 27.03.2013
Сообщений: 47
27.03.2013, 18:02  [ТС] #14
Цитата Сообщение от easybudda Посмотреть сообщение
A pair of expressions separated by a comma is evaluated left to right, and the type and value of the result are the type and value of the right operand.
Вот этого нет.Перелистал главу о циклах.У меня этого нет..можно приложить скан..не нашел
0
easybudda
27.03.2013, 18:16     Уравнение больше реагирует на значение при инициализации переменной
  #15

Не по теме:

Цитата Сообщение от Starter1 Посмотреть сообщение
можно приложить скан
А есть вариант, что я это сам придумал?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2013, 18:16
Привет! Вот еще темы с ответами:

Ошибка инициализации переменной - C++
Подскажите, пожалуйста, как исправить ошибку инициализации vp в данном случае? По идее, в итоге должно получиться три разных значения vp. ...

Непонятная ошибка инициализации переменной - C++
Можете объяснить плес, почему в этам коде ошипка? int x(int()); Пишет error LNK2019: ссылка на неразрешенный внешний символ...

Ошибка инициализации переменной заданного типа - C++
Ошибка в 45ой и 59ой строках. Подскажите, как все-же правильно инициализировать переменную t типа &quot;rabotnik&quot;? /* Исходный список...

Выбор места инициализации переменной для лучшей производительности - C++
Скажите, постоянно приходится инициализировать переменную внутри метода класса пример int curent_h{}; От 50 до нескольких тысяч...


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

Или воспользуйтесь поиском по форуму:
15
27.03.2013, 18:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.