Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с рекурсией!!!

2.2K
14 октября 2006 года
MagicPRO
100 / / 02.10.2006
Нужно определить значение отношения максимального и минимального из последовательности введенных ненулевых чисел (условие завершения ввода чисел выбрать самостоятельно).
//Если можно с комментариями а то я с рекурсией ни прошарусь никак!!
257
14 октября 2006 года
kosfiz
1.6K / / 18.09.2005
делаешь примерно так:
 
Код:
max=matrix[0];
min=max;
for (int i=1;i<=n-1;i++){
     if (matrix>max){
        max=matrix;
     }
     if (matrix<min){
        min=matrix;
     }
}

где n - количество элементов, т.е. введенных чисел, а сам массив содержит эти числа. остается только поделить max на min. массив-то я думаю ты заполнишь вводимыми числами. вот вроде так.
3.0K
14 октября 2006 года
Мerlin
267 / / 25.07.2006
Приблизительно
Код:
int matrix[100];

void getMinMax(int *m, int ndx, int *min, int *max)
{
  if(m[ndx] > *max)
    *max = m[ndx];
  else if (m[ndx] < *min)
    *min = m[ndx];
  if(ndx>0)  // вместо >0 можно и >1
    getMinMax(m, ndx-1, min, max);
}

void main()
{
  int min, max;
  int mcnt = -1;
  // ВВодятся данные в массив matrix,
  // пока не встретится 0
  // В качестве индекса используется mcnt
...
...
...
  // В конце ввода mcnt должен содержать индекс посл.элемента
  min = matrix[0];
  max = matrix[0];
  getMinMax(matrix, mcnt, &min, &max);
  printf("%3d %3d\n",min, max);
}
257
14 октября 2006 года
kosfiz
1.6K / / 18.09.2005
мне одно непонятно: зачем использовать в этой задаче рекурсию - здесь и без неё обойтись можно, к тому же (может конечно и ошибаюсь), но с рекурсией работать будет медленнее.
2
14 октября 2006 года
squirL
5.6K / / 13.08.2003
рекурсия действительно штука не очень хорошая. но Merlin читал ТЗ внимательно, а ты нет. сразу видно опыт программерский :)
посмотри название темы и перечитай вопрос.
257
14 октября 2006 года
kosfiz
1.6K / / 18.09.2005
да видел я название темы и опыт у меня есть, просто не привык усложнять простое, а Merlin конечно молодец. я что сказать хочу, наверное, задачку учитель какой-нить задал и хотел, чтоб на этом примере разобрались с рекурсией, так задавать надо задачи, в которых её применение необходимо, а то потом получаются горе программисты с тормозными прогами.
2.2K
15 октября 2006 года
MagicPRO
100 / / 02.10.2006
[QUOTE=kosfiz]да видел я название темы и опыт у меня есть, просто не привык усложнять простое, а Merlin конечно молодец. я что сказать хочу, наверное, задачку учитель какой-нить задал и хотел, чтоб на этом примере разобрались с рекурсией, так задавать надо задачи, в которых её применение необходимо, а то потом получаются горе программисты с тормозными прогами.[/QUOTE]
Спасибо мужики выручили, а то блин с рекурсией никак не вьеду!!!:)
2.2K
19 октября 2006 года
MagicPRO
100 / / 02.10.2006
Короче тут прикол в том что мы вводим Х несколько раз ну типа return, а конец ввода дожно быть условие например Х<0, и из тех введенных Иксов(Х) мы находим соотношение !!
242
19 октября 2006 года
Оlga
2.2K / / 04.02.2006
а можно по русски объяснить что (не как) нужно сделать и язык программирования просьба указывать. читайте правила форума, давайте темам информативные названия, а то буду удалять. чес слово надоело одно и тоже повторять.

[COLOR=red][/COLOR]
257
20 октября 2006 года
kosfiz
1.6K / / 18.09.2005
MagicPro
так Merlin же все написал. ну вот тебе ввод иксов:
 
Код:
int i=0,a=0;
cin>>a;
    while (a>=0){
        matrix=a;
        i++;
        cin>>a;
    }

тогда j=i-1 будет количество элементов в массиве, т.е. введенных иксов, а потом getMinMax и все. или тебе и ввод иксов рекурсивно надо?
2.2K
21 октября 2006 года
MagicPRO
100 / / 02.10.2006
[QUOTE=kosfiz]MagicPro
так Merlin же все написал. ну вот тебе ввод иксов:
 
Код:
int i=0,a=0;
cin>>a;
    while (a>=0){
        matrix=a;
        i++;
        cin>>a;
    }

тогда j=i-1 будет количество элементов в массиве, т.е. введенных иксов, а потом getMinMax и все. или тебе и ввод иксов рекурсивно надо?[/QUOTE]
массив тут не надо, я делаю просто ввод иксов а потом из них нахожу min, max. А вот с рекурсией ввода можно, там же идет возвращение пока будет например x<0???
3.0K
21 октября 2006 года
Мerlin
267 / / 25.07.2006
Предп. что вводится хотя бы 2 числа.
Код:
#include <iostream.h>
#include <conio.h>

void getMinMax(int *min, int *max)
{
  int n;
  cout << "Введите число : " << endl;
  cin >> n;
  if(n > 0)
  {
    if(n > *max)*max = n;
    if(n < *min)*min = n;
    getMinMax(min, max);
  }
}

void main()
{
  int min = 0x7FFFFFFFF;
  int max = 0;
  getMinMax(&min, &max);
  cout << "min : " <<  min << " max : " << max << endl;
  getch();
}
242
21 октября 2006 года
Оlga
2.2K / / 04.02.2006
2 вариант =), попроще
Код:
#include <stdio.h>
void getMinMax(int *min, int *max)
{
 int n;
 printf("\nEnter a value: ");
 scanf("%d", &n);
 if(n < 0) return;
 if(*min > n || *min == -1) *min = n;
 if(*max < n || *max == -1) *max = n;
 getMinMax(min, max);
}
void main(void)
{
 int min = -1, max = -1;
 getMinMax(&min, &max);
 printf("\n\n\nMin = %d\nMax = %d\n", min, max);
}
3.0K
21 октября 2006 года
Мerlin
267 / / 25.07.2006
Еще один вариант
Код:
#include <iostream.h>
#include <conio.h>

void getMinMax(int *min, int *max)
{
  int n;
  cout << "Введите число : " << endl;
  cin >> n;
  if(n [color=red]>[/color] 0)
  {
    if(n > *max)*max = n;
    else if(n < *min)*min = n;
    getMinMax(min, max);
  }
}

void main()
{
  int min = 0;
  int max = 0;
  getMinMax(&min, &max);
  if(max==0)
    cout << "Вы не ввели ни одного числа" << endl;
  else
  {
    if(min==0)min = max;
    cout << "min : " <<  min << " max : " << max << endl;
  }
  getch();
}
2.2K
24 октября 2006 года
MagicPRO
100 / / 02.10.2006
#include<iostream.h>
#include<conio.h>

void vvod(int x)

{
cout<<"Vvedite X: ";
cin>>x;
if(x<0) return x;
if(x>0) return vvod(x);
}
void main() //теперь надо найти min и max из этих введенных чисел
{
in x,n, max, min;
{if(x > max) max = x;
if(x < min) min = x;
}
//теперь надо найти отношение минимуму к максимуму
n=min/max;
cout<<"Отношение минимуму и максимума: "<<n<<endl;
}
getch();
}
можете глянуть правильно или чето надо подкорректировать
3.0K
25 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=MagicPRO]#include<iostream.h>
#include<conio.h>

void vvod(int x)

{
cout<<"Vvedite X: ";
cin>>x;
if(x<0) return x;
if(x>0) return vvod(x);
}
void main() //теперь надо найти min и max из этих введенных чисел
{
in x,n, max, min;
{if(x > max) max = x;
if(x < min) min = x;
}
//теперь надо найти отношение минимуму к максимуму
n=min/max;
cout<<"Отношение минимуму и максимума: "<<n<<endl;
}
getch();
}
можете глянуть правильно или чето надо подкорректировать[/QUOTE]В корне неправильно.
16K
25 октября 2006 года
PeaK
49 / / 02.10.2006
Интересно, что Вам советует компилятор?
Код хоть немного отлаживать пробовали, или это наброски?
2.2K
25 октября 2006 года
MagicPRO
100 / / 02.10.2006
[QUOTE=PeaK]Интересно, что Вам советует компилятор?
Код хоть немного отлаживать пробовали, или это наброски?[/QUOTE]
Эт наброски просто решил чуть чуть подругому сделать
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог