Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2009, 02:53   #11
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

одно...

вот эта задача, только без функций
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

const n=6;
void main ()
{
   clrscr ();
   float F[n][n], X[n], min, max;
   int i, j;
   printf ("matriza A\n");
   for (i=1; i<n; i++)
   {
      for (j=1; j<n; j++)
      {
        F[i][j]=fabs(pow(2,i)/((i-2.5)*i*i))*((2-fabs(j-5))*(2-fabs(j-5)));
        printf("%5.1f  ", F[i][j]);
      }
      printf("\n");
   }
   
    for (i=1; i<n; i++)
      for (j=1; j<n; j++)
      {
       max = F[i][1];
       min = F[i][1];
       for (j=1; j<n; j++)
       {
        if (F[i][j]>max) max=F[i][j];
        if (F[i][j]<min) min=F[i][j];
       }
       printf("min i max strok %d ", i);
       printf ("max=%5.1f  ", max);
       printf ("min=%5.1f\n", min);
       X[i]=max-min;	   
      }

   for (i=1; i<n; i++)
      printf ("X[%d] = %5.1f\n", i, X[i]);		        

   if(n<3) printf ("U is not found: n<3.");//определение U
   else
   {
     min = fabs(X[2])-fabs(X[1]);
     for(i=2; i<n;i++)
     {
       float xx = fabs(X[i+1])-fabs(X[i]);
       if (xx<min) min=xx;
     }	
     printf ("U = %5.1f\n", min);
   }
   getch();
}
но лучше же распечатать в основной проге, но как это сделать?
aka_faith вне форума Ответить с цитированием
Старый 17.05.2009, 03:07   #12
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от aka_faith
но лучше же распечатать в основной проге, но как это сделать?
Ну массив-то у вас уже есть. Так какие проблемы? Просто возьмите и распечатайте его в цикле.

В общем, вот.
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

void Form_Matrix(float *x,float k1,float k2,float k3,int n)
{
  int i,j,k;
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    x[i*n + j]=fabs(pow(2,i)/((i-k1)*(i+k2)*(i+k2)))*((2-fabs(j-k3))*(2-fabs(j-k3)));
}

void Print_Matrix(float *x,int n)
{
  int i,j;
    for(i=0;i<n;i++,printf("\n"))
      for(j=0;j<n;j++)
      printf(" %3.1f ",x[i*n+j]);
}


void Min_Max(float *f,int n, float x[])
{
  int i,j;
  int min,max;
  for (i=0; i<n; i++)
   {
    min=0;
    max=0;
    for (j=0; j<n; j++)
      {
       	if (f[i*n+j]>f[i*n+max]) max=j;
	       if (f[i*n+j]<f[i*n+min]) min=j;
       }
      // printf ("min i max strok %d", i);
      // printf ("max=%5.1f",f[i*n + max] );
      // printf ("min=%5.1f",f[i*n + min]);
       x[i]=f[i*n + max] - f[i*n + min];
    }
}

float U(float *X, int n)
{
 float min;
 int i;
 min = fabs(X[2])-fabs(X[1]);
 for(i=2; i<n;i++)
  {
   float xx = fabs(X[i+1])-fabs(X[i]);
   if (xx<min) min=xx;
  }
 return min;
}

int main ()
{
  const int n=6;
  float F[n][n], X[n];
  int i;
  float min;

  printf("matriza A\n");
  printf("razmer=");
  Form_Matrix(&F[0][0],2.5,1,5,n);
  Print_Matrix(&F[0][0],n);

  printf("matriza Max-Min\n");
  Min_Max(&F[0][0],n,X);

   for (i=0; i<n; i++)
    printf ("X[%d] = %5.1f\n", i, X[i]);

  min=U(X,n);
  printf("\n %5.1f\n", min);

  getch();
  return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 04:25   #13
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

компилятор на константу ругается...
aka_faith вне форума Ответить с цитированием
Старый 17.05.2009, 05:18   #14
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

работает!!!
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define n1 6


void Form_Matrix(float *x,float k1,float k2,float k3,int n)
{
  int i,j,k;
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    x[i*n+j]=fabs(pow(2,i)/((i-k1)*(i+k2)*(i+k2)))*((2-fabs(j-k3))*(2-fabs(j-k3)));
}

void Print_Matrix(float *x,int n)
{
  int i,j;
    for(i=0;i<n;i++,printf("\n"))
      for(j=0;j<n;j++)
      printf(" %3.1f ",x[i*n+j]);
}


void Min_Max(float *f,int n, float x[])
{
  int i,j;
  int min,max;
  for (i=0; i<n; i++)
   {
    min=0;
    max=0;
    for (j=0; j<n; j++)
      {
	if (f[i*n+j]>f[i*n+max]) max=j;
	       if (f[i*n+j]<f[i*n+min]) min=j;
       }
	   x[i]=f[i*n+max]-f[i*n+min];
    }
}

float U(float *X, int n)
{
 float min;
 int i;
 min = fabs(X[2])-fabs(X[1]);
 for(i=2; i<n;i++)
  {
   float xx = fabs(X[i+1])-fabs(X[i]);
   if (xx<min) min=xx;
  }
 return min;
}


void main ()
{

  float F[n1][n1], X[n1], min;
  int i;

  printf("matriza A\n");
  Form_Matrix(&F[0][0],2.5,1,5,n1);
  Print_Matrix(&F[0][0],n1);
  printf("matriza Max-Min\n");
  Min_Max(&F[0][0],n1,X);
  for (i=0; i<n1; i++)
    printf (" %3.1f", X[i]);
  printf("\nU=");
  min=U(X,n1);
  printf("%3.1f", min);

  getch();

}
Спасибо Вам, Sazary, огромное!! Пойду в понедельник сдавать это творение)))
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 00:24   #15
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

ROTFLMAOSTC!! Как сделать рекурсию в функции Form_Matrix? Там же 2 в степени i и счет начинается с 1, а не с 0, значит к i и j надо добавить 1... Но как сделать рекурсию?
Цитата:
(i,j)=F(i,j)=2^i/((i-5/2)*(i+1)^2)*(2-|j-5|)^2
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>


void Form_Matrix(float *x,int n)
{
  int i,j,k;
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    x[i*n+j]=fabs(pow(2,(i+1))/(((i+1)-5/2)*(i+2)*(i+2)))*((2-fabs(j-4))*(2-fabs(j-4)));
}

void Print_Matrix(float *x,int n)
{
  int i,j;
    for(i=0;i<n;i++,printf("\n"))
      for(j=0;j<n;j++)
      printf(" %3.1f ",x[i*n+j]);
}


void Min_Max(float *f,int n, float x[])
{
  int i,j;
  int min,max;
  for (i=0; i<n; i++)
   {
    min=0;
    max=0;
    for (j=0; j<n; j++)
      {
	if (f[i*n+j]>f[i*n+max]) max=j;
	       if (f[i*n+j]<f[i*n+min]) min=j;
       }
	   x[i]=f[i*n+max]-f[i*n+min];
    }
}

float U(float *X, int n)
{
 float min;
 int i;
 min = fabs(X[2])-fabs(X[1]);
 for(i=2; i<n;i++)
  {
   float xx = fabs(X[i+1])-fabs(X[i]);
   if (xx<min) min=xx;
  }
 return min;
}


void main ()
{

  float F[30][30], X[30], n=6, min;
  int i;

  printf("matriza A\n");
  Form_Matrix(&F[0][0],n);
  Print_Matrix(&F[0][0],n);
  printf("matriza Max-Min\n");
  Min_Max(&F[0][0],n,X);
  for (i=0; i<n; i++)
    printf (" %3.1f", X[i]);
  printf("\nU=");
  min=U(X,n);
  printf("%3.1f", min);

  getch();

}
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 00:29   #16
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Как сделать рекурсию в функции Form_Matrix?
А это обязательно? В задании, вроде, про нее ни слова.

И нужна именно рекурсия, или цикл с рекуррентными соотношениями?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 00:40   #17
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

Хм, цикл с рекуррентными соотношениями. Чтобы заново все не считало, а только прибавляло...
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 00:48   #18
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вообще, смысла не вижу. Т.к. сделать это можно только для одного множителя - 2^i. Все остальное все равно придется считать заново.
Если хотите, заведите переменную a. Начальное значение = 2.
В конце каждой итерации по i умножайте его на 2.
Это будет замена для 2^i.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 00:54   #19
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

но так же будет сложней, а необходимо облегчить работу... да и по формуле, которая в задании, будет деление на нолек...
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 00:57   #20
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от aka_faith
но так же будет сложней, а необходимо облегчить работу..
Что сложней? Легче использовать функцию pow.
Цитата:
Сообщение от aka_faith
да и по формуле, которая в задании, будет деление на нолек...
Это где такое? Если вы про (i-5)/2, то тут вам никакая рекурсия не поможет.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибки Satorin Общие вопросы Delphi 4 25.12.2008 21:35
помогите исправить ошибки kermit Помощь студентам 1 21.06.2008 10:44
Помогите исправить незначительные ошибки HAMMAN Помощь студентам 1 10.06.2008 19:07
помогите исправить ошибки в программе... VDK23 Помощь студентам 1 17.04.2008 13:05
Помогите исправить ошибки ...С++ Настенька Помощь студентам 1 25.03.2007 23:30