Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция возвращающая более одного значения 
:(
    Опции темы
suse
Дата 3.7.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Даны 3 формулы:
L=2*пи*R;
S=пи*(R*R);
V=4/3*пи*(R*R*R).
Переменная R меняется от 2.0 до 5.0 с шагом 0.5.
Написать функцию, которая будет выводить эти значения.
Вывод данных из функции организовать с помощью указателей или структуры.
PM MAIL   Вверх
dizzy1984
Дата 3.7.2008, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: нет
Всего: 25



Вот тут вопрос - функция должна возвращать данные или отображать на экране?
Написал оба варианта
Код

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

struct data
{
    double L, S, V;
};

data func1(double R)
{
    data r;
    r.L = 2 * M_PI * R;
    r.S = M_PI * R * R;
    r.V = 4.0 / 3.0 * M_PI * R * R * R;

    return r;
}

void func2(double R)
{
    double L, S, V;
    L = 2 * M_PI * R;
    S = M_PI * R * R;
    V = 4.0 / 3.0 * M_PI * R * R * R;

    printf("%.6f %.6f %.6f\n", L, S, V);
}

int main()
{
  double R;
  for (R = 2.; R <= 5. ; R += 0.5)
  {
      func2(R);
  }

  for (R = 2.; R <= 5. ; R += 0.5)
  {
      data d = func1(R);
      printf("%.6f %.6f %.6f\n", d.L, d.S, d.V);
  }

  return 0;
}

PM MAIL   Вверх
Lazin
Дата 3.7.2008, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Код

void func(double R, double &V, double &S, double &L)
{
   V = ...;
   S = ...;
   L = ...;
}

double v, s, l;

func(100, v, s, l);

std::cout << "result: " << v << ", " << s << ", " << l << std::endl;


Это сообщение отредактировал(а) Lazin - 3.7.2008, 07:44
PM MAIL Skype GTalk   Вверх
Ln78
Дата 3.7.2008, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: нет
Всего: 15



Lazin, 
Цитата(suse @  3.7.2008,  02:28 Найти цитируемый пост)
Вывод данных из функции организовать с помощью указателей 

а не ссылок. smile 
Тот же пример, только с указателями:
Код

void func(double R, double *V, double *S, double *L)
{
   *V = ...;
   *S = ...;
   *L = ...;
}

double v, s, l;

func(100, &v, &s, &l);

std::cout << "result: " << v << ", " << s << ", " << l << std::endl;

PM MAIL   Вверх
suse
Дата 3.7.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



а что такое r.L

Добавлено через 12 минут и 44 секунды
Все понятно. Это операция обращения к элементам структуры
PM MAIL   Вверх
suse
Дата 4.7.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Итак! Вывод с помощью структуры:
Код

#include <math.h>
#include <stdio.h>
struct data     //объявление структуры
{
     float L, S, V;
};
data func(float R)   // функция func структуры data
{
    data r;
    r.L = 2 * M_PI * R;
    r.S = M_PI * R * R;
    r.V = 4.0 / 3.0 * M_PI * R * R * R;
    return r;
}

int main()
{
  float R;
   for (R = 2.; R <= 5. ; R += 0.5)
  {
        data h= func(R);
        printf("L=%.3f\t S=%.3f\t V=%.3f\n", h.L,h.S, h.V);
  }
 return 0  ;
}


Добавлено через 53 секунды
С помощью указателей:
Код

#include <math.h>
#include <stdio.h>
void func(float R, float *V, float *S, float *L)
{
    *L = 2 * M_PI * R;
    *S = M_PI * R * R;
    *V = 4.0 / 3.0 * M_PI * R * R * R;
    printf("%.3f %.3f %.3f\n", *L,*S,*V);
}
float main()
{
float R,L,S,V;
for (R = 2.; R <= 5. ; R += 0.5)
{
func(R, &L, &S, &V);
}
return 0;
}


Добавлено через 1 минуту и 27 секунд
Всем огромное спасибо! Экзамен сдан!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.