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

Вывести двумерный массив с 3 знаками после запятой - C++

Восстановить пароль Регистрация
 
Violetta
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
10.03.2014, 23:26     Вывести двумерный массив с 3 знаками после запятой #1
всем привет)

мне нужно вывести двумерный массив с 3 знаками после запятой

не получается(( пробовала по- разному
с принтф если большое число, то тупо формат выводит его.....почему-то
с cout пробовала,setprecision(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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
 
int i,j;
void outArr(float **arr, int MAXM, int MAXN) //pechat massiva
{
   for (j=0;j<MAXM;j++){
   for (i=0;i<MAXN;i++){
    printf( "%7.3f",arr[j][i]," ");
  //  cout <<setw(6)<<setprecision(3)<<arr[j][i]<<" ";
 // cout <<arr[j][i]<<" ";
   // cout endl;
   }
   printf("\n");
  }
}
//*************************************************
// generater
void generateArr(float **arr, int MAXM, int MAXN)
{
  float sum=0;
 
  for (i=0;i<MAXM;i++){
   for (j=0;j<MAXN;j++)
   {
    if (j==0) sum=0;
    arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
    sum=(float)sum+arr[i][j];
 
    }
   }
   outArr(arr, MAXM,MAXN);
 
 
    }
 
 
 
//*******************************************8
//sortirovka
 
void bubbleSort(float **arr, int MAXM, int MAXN){
 // float t;
  for (int k=0;k<MAXM;k++)
  {
  for (i=0;i<MAXN;i++)
  {
    for (j=MAXN-2; j>=i;j--)
    {
     if (arr[k][j]<arr[k][j+1])
       {float t=arr[k][j];
    arr[k][j]=arr[k][j+1];
    arr[k][j+1]=t;
       }
    }
       }
     }
 
 
  outArr(arr,MAXM,MAXN);
}
 
void main()
{
   int MAXM, MAXN;
   float **a;
   int b=1;
   clrscr();
// proverka na vvod
//********************************************************
printf ("vvedite rasryadnost' matricy\n");
 
printf ("M ne bolee 10\n");
while ((!(cin>>MAXM)) || (MAXM<=0)|| (MAXM>10))
{
cin.clear();
while (cin.get()!='\n');
printf ("Oshibka vvoda!\n");
printf ("Povtorite vvod\n");
}
 
printf("N ne bolee 10\n");
while ((!(cin>>MAXN)) || (MAXN<=0)|| (MAXN>10))
{
cin.clear();
while (cin.get()!='\n');
printf ("Oshibka vvoda!\n");
printf ("Povtorite vvod\n");
}
 
 
//****************************************************
// proga
   cout<<"Generated array\n";
 
   generateArr(a,MAXM, MAXN);
    cout<<"After sorting\n";
   bubbleSort(a,MAXM,MAXN);
   getch ();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 23:26     Вывести двумерный массив с 3 знаками после запятой
Посмотрите здесь:

Как вывести квадратный корень с числа с 4-мя знаками после запятой C++
C++ Для каждого Ai, начиная с последнего и заканчивая первым, вывести его квадратный корень не менее чем с четырьмя знаками после запятой
C++ Вычислить сумму ряда, состоящего из N слагаемых, и вывести результат с M знаками после запятой
C++ Вычислить сумму ряда, состоящего из N слагаемых, и вывести результат с M знаками после запятой
C++ Рандомные дроби с 2-3 знаками после запятой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
10.03.2014, 23:48     Вывести двумерный массив с 3 знаками после запятой #2
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
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <iomanip>
using namespace std;
 
 
int i,j;
void outArr(float **arr, int MAXM, int MAXN) //pechat massiva
{
   for (j=0;j<MAXM;j++){
   for (i=0;i<MAXN;i++){
    printf( "%7.3f",arr[j][i]," ");
//     cout.flags(ios::fixed);
  //  cout <<setprecision(3)<<arr[j][i]<<" ";
   }
   printf("\n");
  }
}
//*************************************************
// generater
void generateArr(float **arr, int MAXM, int MAXN)
{
  float sum=0;
 
  for (i=0;i<MAXM;i++){
   for (j=0;j<MAXN;j++)
   {
    if (j==0) sum=0;
    arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
    sum=(float)sum+arr[i][j];
 
    }
   }
   outArr(arr, MAXM,MAXN);
 
 
    }
 
 
 
//*******************************************8
//sortirovka
 
void bubbleSort(float **arr, int MAXM, int MAXN){
 // float t;
  for (int k=0;k<MAXM;k++)
  {
  for (i=0;i<MAXN;i++)
  {
    for (j=MAXN-2; j>=i;j--)
    {
     if (arr[k][j]<arr[k][j+1])
       {float t=arr[k][j];
    arr[k][j]=arr[k][j+1];
    arr[k][j+1]=t;
       }
    }
       }
     }
 
 
  outArr(arr,MAXM,MAXN);
}
 
void main()
{
   int MAXM, MAXN;
  // float **a;
   int b=1;
//   clrscr();
// proverka na vvod
//********************************************************
printf ("vvedite rasryadnost' matricy\n");
 
printf ("M ne bolee 10\n");
while ((!(cin>>MAXM)) || (MAXM<=0)|| (MAXM>10))
{
cin.clear();
while (cin.get()!='\n');
printf ("Oshibka vvoda!\n");
printf ("Povtorite vvod\n");
}
 
printf("N ne bolee 10\n");
while ((!(cin>>MAXN)) || (MAXN<=0)|| (MAXN>10))
{
cin.clear();
while (cin.get()!='\n');
printf ("Oshibka vvoda!\n");
printf ("Povtorite vvod\n");
}
 
float** a = new float *[MAXM];
    for (int i = 0; i < MAXM; i++)
        a[i] = new float [MAXN];
 
 
//****************************************************
// proga
   cout<<"Generated array\n";
 
   generateArr(a,MAXM, MAXN);
    cout<<"After sorting\n";
   bubbleSort(a,MAXM,MAXN);
   getch ();
}
посматрите правильно ли работает вот этот код
вроде бы выводит нужное количество знаков после запятой, насколько я помню setprecision(n) будет выводить n знаков (и целую и дробную часть) если не указать что нужно выводить n знаков после запятой, что осуществляется строкой cout.flags(ios::fixed);

и такой вопрос, я конечно новичёк в с++(да и вообще в програмировании) но как вы заставили работать setprecision(3) без подключения библиотеки iomanip?
Violetta
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
11.03.2014, 00:15  [ТС]     Вывести двумерный массив с 3 знаками после запятой #3
магияяя)))
шучу) там подключено, не сначала скопировала)

Добавлено через 1 минуту
с принтф, если ввести 10 на 10
то он выводит %7,3f и все
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
11.03.2014, 11:03     Вывести двумерный массив с 3 знаками после запятой #4
хммм странно, у меня нормально работает, сколько в принтэф укажешь знаков после запятой столько и напечатает (правда, кажется, из-за типа начиная с 7-го он будет печатать нули)
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
11.03.2014, 11:13     Вывести двумерный массив с 3 знаками после запятой #5
Цитата Сообщение от Violetta Посмотреть сообщение
с cout пробовала,setprecision(3) не работает, ошибки нет, но выводит только целую часть
Следует зафиксировать десятичную точку:
C++
1
    cout << setiosflags(ios::fixed) << setprecision(4) << arr[j][i] << endl;
Violetta
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
12.03.2014, 11:03  [ТС]     Вывести двумерный массив с 3 знаками после запятой #6
все равно только целую часть выводит(((
им причем если больше 4*4 то вообще не компилирует(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2014, 13:52     Вывести двумерный массив с 3 знаками после запятой
Еще ссылки по теме:

Вычислить сумму ряда, состоящего из N слагаемых, и вывести результат с M знаками после запятой C++
C++ Вычислить сумму ряда, состоящего из N слагаемых, и вывести результат с M знаками после запятой
C++ Вывести значение пераменной с шестью знаками после запятой

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

Или воспользуйтесь поиском по форуму:
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
12.03.2014, 13:52     Вывести двумерный массив с 3 знаками после запятой #7
Цитата Сообщение от Violetta Посмотреть сообщение
C++
1
arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
Так как i, j имеют тип int, то выражение (i+1)*(j+5)/(i+j+1) имеет целый тип и целое значение при любых i, j.
/ здесь обозначает целочисленное деление, например 20 / 3 равняется 6
C++
1
   arr[i][j]= (float)sum + (i+1)*(j+5)/(i+j+1);/* К sum прибавляется целое число. */
Чтобы получить float,
C++
1
 arr[i][j]= (float)sum +  (float)(i+1)*(j+5)/(i+j+1);
Yandex
Объявления
12.03.2014, 13:52     Вывести двумерный массив с 3 знаками после запятой
Ответ Создать тему
Опции темы

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