Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Проблема с возвратом значений из внешки (http://www.tehnari.ru/f41/t83877/)

IronForge 13.01.2013 10:08

Проблема с возвратом значений из внешки
 
Программа по реализации метода простых итераций. В main только ввод и вывод, во внешке сама работа.
Проблема в том, что никак не удается нормально вернуть значения. Ни черта не знаю, как осуществлять возврат и использование нескольких значений, нигде не смог найти стоящей информации об этом.

Цитата:

#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
extern double func(double x0, double x1, double eps);
double x0, x1, eps;
printf("Enter x0, eps");
scanf("%lf", &x0);
scanf("%lf", &eps);
printf("x0=%lf, x1=%lf", func(x0, x1, eps));
getch();
}

double func (double x0, double x1, double eps)
{
double k, z;
m2: z=fabs(-(sin(x0)));
if (z>=1)
{
printf("Process terminated");
return 0;
}
else
x1=cos(x0);
z=fabs(x1-x0);
if (z>eps)
{
x0=x1;
goto m2;
}
else
return x0, x1;
}
Возврат осуществляется, но только для x0. X1 же выводится кучей несуразных цифр. Иногда иными символами.
Что нужно исправить?

kreol 13.01.2013 10:59

функция не может возвращать несколько значений. вам необходимо использовать ссылки...
в основной программе делаешь массив с двумя элементами и передаешь в функцию в качестве ссылки/указателя а дальше в этот же массив в своей функции записываешь то, что хочешь вернуть

IronForge 13.01.2013 11:14

Аргх... Буду благодарен, если приведете пример или же прямо в вышеуказанном коде.
В частности не ясно, что указывать в передаваемых параметрах при объявлении внешки.

kreol 13.01.2013 11:40

Вот только зачем использовать extern в данной программе?
Код:


#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
    double x[2];
    extern double func(double *x, double eps);
    double x0, x1, eps;
    printf("Enter x0, eps");
    scanf("%lf", &x[0]);
    scanf("%lf", &eps);
    func(x, eps);
    printf("x0=%lf, x1=%lf",x[0], x[1]);
    getch();
}

double func (double *x, double eps)
{
    double k, z;
    m2: z=fabs(-(sin(x[0])));
    if (z>=1)
    {
        printf("Process terminated");
        return 1;
    }
    else
        x[1]=cos(x[0]);
    z=fabs(x[1]-x[0]);
    if (z>eps)
    {
        x[0]=x[1];
        goto m2;
    }
    else
        x[0] = x[0];
        x[1] = x[1];
        return 0;
}


IronForge 13.01.2013 11:42

Бредовая привычка с какого-то примера.
Огромное спасибо!


Часовой пояс GMT +4, время: 20:07.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.