Форум программистов, компьютерный форум CyberForum.ru

Матрица мин макс, не правильно выводиться - C++

Восстановить пароль Регистрация
 
Excluz1ve
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 18
28.12.2012, 17:59     Матрица мин макс, не правильно выводиться #1
Дана функция y=f(x), x изменяется x_min от до x_max. Максимальное и минимальное значение функции y=f(x) на интервале xϵ[x_min,x_max ] обозначим как y_minи y_max. Необходимо создать матрицу M размерностью m×n , так что элемент матрицы M_0.0 имеет координаты (x_(min,) y_min), а элемент матрицы M_(m-1.n-1) имеет координаты (x_(max,) y_max). Элемент матрицы M_(i,j)равен ‘o’, если его координата по оси Y ближе к f(x), чем некоторое значение d, иначе равен ‘ ‘(пробел).
Необходимо написать программу для расчёта матрицы M и вывода строк данной матрицы в текстовый файл в обратном порядке (от m - 1 до нулевой).

f=sin^2 (-p,p)

Нужно чтобы выводился в текстовый файл график синуса.



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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
 
 
#include <iostream>
#include <stdio.h>
#include <math.h>
 
using namespace std;
 
double Min(double xmin, double xmax, double step) //Функция вернет ymin
{
  double min;
  min=sin(xmin*xmin);
  for (double i=xmin+ step; i<=xmax; i+=step)
    {
     if (sin(i*i)<min) min=sin(i*i);
    }
  return min;
}
 
double Max(double xmin, double xmax, double step) //Функция вернет ymax
{
  double max;
  max=sin(xmin*xmin);
  for (double i=xmin+step; i<=xmax; i+=step)
    {
     if (sin(i*i)>max) max=sin(i*i);
    }
  return max;
}
 
 
int main()
{
 FILE *OutputFile;
 char path_out[25];
  int m,n;
  double ymin, ymax,x,dx,dy,y,f,d;
  double xmin,xmax;
  xmin=-3.14, xmax=3.14;
  printf("Lab N1. \nFunction: sin(x^2).\nRange: [-Pi;Pi]\n");
 
  //Получить n и d
  printf("\nInput n: \n");
  cin>>n;
 
  printf("\nInput d: \n");
  cin>>d;
  if (n<=0||d<=0){ cout<<"ERROR\n"; system("pause"); return 0;}
 
  //Рассчитать ymax и ymin
 
  ymin=Min(xmin,xmax, d);
  ymax=Max(xmin,xmax, d);
  //Рассчет m
  m=(n*(ymax-ymin)/(xmax-xmin));
  cout<<"m = "<<m<<endl;
 
//Объявление матрицы
char **M;
M=new char* [m];
for (int i=0; i<m; i++)
  M[i]=new char[n];
 
//Заполнение матрицы
dx=(xmax-xmin)/n;//Щаг по x
dy=(ymax-ymin)/m;//Шаг по y
x=xmin;
int j=0,i;
while (j<n){
  f=sin(x*x);
  i=m-1; y=ymin;
  while (i>=0){
    if (fabs(y-f)<=d )
      M[i][j]='0';
    else M[i][j]='_';
    i--; y=y+dy;
  }
  j++; x=x+dx;
}
 
printf("Enter output file for result: "); //запрос имени выходного файла
    scanf("%s",path_out);
 
    if ((OutputFile=fopen(path_out,"w+")) == NULL ) //если не удалось открыть файл, то
    {
        perror(path_out); //выводим об этом сообщение
        getch();
    }
//Вывод матрицы
 
printf("Initial matrix: \n");
 
for (i=0;i<m;i++)
{ for(j=0;j<n;j++)
 
   {
      printf("%5i",M[i][j]);
      fprintf(OutputFile,"%4d",M[i][j]);
   }
   printf("\n");
   fprintf(OutputFile,"\n");
}
 
for (i=0;i<m;i++)
{ for(j=0;j<n;j++)
  cout<<M[i][j];
 cout<<"\n";
}
 
 
for (int i = 0; i < m; i ++ )
delete M[i];
delete M;
        cout<<endl;
        system("pause");
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2012, 17:59     Матрица мин макс, не правильно выводиться
Посмотрите здесь:

C++ макс и мин растояние между точками
C++ двумерный массив макс мин
Определить макс и мин цифры C++
C++ Одномерный массив макс мин
список мин и макс элемент C++
C++ Массив поиск мин-макс элемента
Поменять местами макс и мин эл-ты массива C++
C++ Мин-макс в списке

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Learx
1032 / 839 / 85
Регистрация: 31.03.2010
Сообщений: 2,465
28.12.2012, 19:09     Матрица мин макс, не правильно выводиться #2
Немножко поправил:
1. Шаг вычисляется автоматически(это и есть d)
2. Именил чуток вычисление m
3. Использовал вывод с++. вывод СИ чет глючит.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
 
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <fstream> 
using namespace std;
 
double Min(double xmin, double xmax, double step) //ÔóГ*êöèÿ ГўГҐГ°Г*ГҐГІ ymin
{
  double min;
  min=sin(xmin*xmin);
  for (double i=xmin+ step; i<=xmax; i+=step)
    {
     if (sin(i*i)<min) min=sin(i*i);
    }
  return min;
}
 
double Max(double xmin, double xmax, double step) //ÔóГ*êöèÿ ГўГҐГ°Г*ГҐГІ ymax
{
  double max;
  max=sin(xmin*xmin);
  for (double i=xmin+step; i<=xmax; i+=step)
    {
     if (sin(i*i)>max) max=sin(i*i);
    }
  return max;
}
 
 
int main()
{
 FILE *OutputFile;
 char path_out[25];
  int m,n;
  double ymin, ymax,x,dx,dy,y,f,d=1;
  double xmin,xmax;
  xmin=-3.14, xmax=3.14;
  printf("Lab N1. \nFunction: sin(x^2).\nRange: [-Pi;Pi]\n");
 
  //Ïîëó÷èòü n ГЁ d
  printf("\nInput n: \n");
  cin>>n;
 
  if (n<=0||d<=0){ cout<<"ERROR\n"; system("pause"); return 0;}
 
  //ГђГ*Г±Г±Г·ГЁГІГ*ГІГј ymax ГЁ ymin
 
  ymin=Min(xmin,xmax, fabs(xmax-xmin)/n);
  ymax=Max(xmin,xmax, fabs(xmax-xmin)/n);
  
  d=(xmax-xmin)/n;//Г™Г*ГЈ ГЇГ® x
    //ГђГ*Г±Г±Г·ГҐГІ m
  m=round((ymax-ymin)/d);
 
  cout<<"m = "<<m<<endl;
 
//ÎáúÿâëåГ*ГЁГҐ Г¬Г*òðèöû
char **M;
M=new char* [m];
for (int i=0; i<m; i++)
  M[i]=new char[n];
 
 
 
x=xmin;
int j=0,i;
while (j<n){
  f=sin(x*x);
  i=m-1; y=ymin;
  while (i>=0){
    if (fabs(y-f)<=d )
      M[i][j]='0';
    else M[i][j]=' ';
    i--; y=y+d;
  }
  j++; x=x+d;
}
 /*
printf("Enter output file for result: "); //Г§Г*ïðîñ èìåГ*ГЁ âûõîäГ*îãî ГґГ*éëГ*
    scanf("%s",path_out);
 
    if ((OutputFile=fopen(path_out,"w+")) == NULL ) //åñëè Г*ГҐ ГіГ¤Г*ëîñü îòêðûòü ГґГ*éë, ГІГ®
    {
        perror(path_out); //âûâîäèì îá ýòîì ñîîáùåГ*ГЁГҐ
        getch();
    }
    */
//Âûâîä Г¬Г*òðèöû
 
 
printf("Initial matrix: \n");
 
ofstream file; file.open("text.txt"); 
/*
for (i=0;i<m;i++)
{ for(j=0;j<n;j++)
 
   {
      printf("%5i",M[i][j]);
      fprintf(OutputFile,"%4d",M[i][j]);
      
   }
   printf("\n");
   fprintf(OutputFile,"\n");
}
*/
for (i=0;i<m;i++)
{ for(j=0;j<n;j++)
 {
  cout<<M[i][j];file<<M[i][j];  
}
 cout<<"\n"; file<<"\n";
}
 file.close(); 
 
for (int i = 0; i < m; i ++ )
delete M[i];
delete M;
        cout<<endl;
        system("pause");
        return 0;
}
Добавлено через 1 минуту
Если указать достаточно большое значение n и затем открыть в продвинутом текстовом редакторе(напр. AcelPad) и сделать максимальный масштаб, то увидите график функции.

Добавлено через 8 минут
Заполнение матрицы с осями координат:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while (j<n){
  f=sin(x*x);
  i=m-1; y=ymin;
  while (i>=0){
    if (fabs(y-f)<=d )
      M[i][j]='0';    
    else
    { if(fabs(y)<d) M[i][j]='-';
      else if(fabs(x)<d) M[i][j]='|';
       else M[i][j]=' ';
    }
    i--; y=y+d;
  }
  j++; x=x+d;
}
Excluz1ve
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 18
29.12.2012, 02:21  [ТС]     Матрица мин макс, не правильно выводиться #3
спс большое
Yandex
Объявления
29.12.2012, 02:21     Матрица мин макс, не правильно выводиться
Ответ Создать тему
Опции темы

Текущее время: 12:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru