Портал аспирантов
 

Вернуться   Портал аспирантов > Общие > Дискуссионный зал > Физико-математические науки

Ответ
 
Опции темы
Старый 24.02.2015, 18:21   #1
Linka
Advanced Member
 
Аватар для Linka
 
Регистрация: 27.09.2012
Сообщений: 493
По умолчанию вопрос по динамическому массиву с++

Уважаемые форумчане! Очень стыдно спрашивать, но ситуация вынуждает. Под спойлером код на С++. Проблема следующая - динамический массив, который нужно заполнить) Массив заполняется, все хорошо. Но! я заполняю его дробными числами, а на выводе у меня в массиве целые числа (отсечена дробная часть чисел, которые я ввожу). Подскажите, пожалуйста, в чем проблема.
Скрытый текст
#include <iostream>
#include <iomanip>
#include <stdlib.h>

using namespace std;

int main()
{
int n = 0, m = 0;

// Ввод размерности массива
cout << "Введите число фаз и число пар данных n m" << endl;
cin >> n >> m;

// Выделение памяти под массив
double **vect;

try
{
vect = new double* [n];
} catch (bad_alloc ba)
{
cout << "cannot allocate mas in memory " << endl;
system("PAUSE");
exit(1);
}

for(int i = 0; i < n; ++i)
try
{
vect[i] = new double[m];
} catch (bad_alloc ba)
{
cout << "cannot allocate mas in memory" << endl;
system("PAUSE");
exit(1);
}


// Тут ввод массива
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
cout << "Заполните табличный элемент[" << i << "][" << j << "]: " ;
cin >> vect[i][j];
}

cout << endl;
}

for(int i = 0; i < n; ++i)
for(int j = 0; j < m; ++j)
{
int min = j;
for(int k = j; k < m; ++k)
{
if(vect[i][k] < vect[i][min])
min = k;
}

int c;
c = vect[i][j];
vect[i][j] = vect[i][min];
vect[i][min] = c;
}

//Вывод на экран
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
cout << setw (9) << vect[i][j] << " ";
cout << endl;
}

system("PAUSE");
return 0;

}
Linka вне форума   Ответить с цитированием
Реклама
Старый 24.02.2015, 18:47   #2
Bronepoezd
Member
 
Аватар для Bronepoezd
 
Регистрация: 30.12.2011
Адрес: Город на Волге.
Сообщений: 103
По умолчанию

Компилятора под рукой нет, но
int c;

пожалуй лучше заменить на
double c;

Ведь это переменная для обмена местами двух элементов вещественного массива. Так?

Можно ещ&#235; при выводе поставить
cout << fixed << то, что нужно напечатать ;

Да и в конце память, выделенную под массив, лучше освободить с помощью оператора delete.
---------
"В билете один вопрос будет сложный, а другой тяжелый."
Bronepoezd вне форума   Ответить с цитированием
Старый 24.02.2015, 19:15   #3
Linka
Advanced Member
 
Аватар для Linka
 
Регистрация: 27.09.2012
Сообщений: 493
По умолчанию

Bronepoezd, точно, помогло!!!!! спасибо огромное.

Добавлено через 5 минут
Цитата:
Сообщение от Bronepoezd Посмотреть сообщение
Да и в конце память, выделенную под массив, лучше освободить с помощью оператора delete.
а если мне этот массив нужен в последующих вычислениях?

Добавлено через 9 минут
а еще, если в двух словах, чем fixed отличается от setw ()? и так, и так работает хорошо
Linka вне форума   Ответить с цитированием
Старый 24.02.2015, 20:01   #4
Alarmod
Advanced Member
 
Регистрация: 21.06.2012
Адрес: Переславль-Залесский
Сообщений: 434
По умолчанию

Когда совсем-совсем не нужен, тогда и освобождайте.
Alarmod вне форума   Ответить с цитированием
Старый 24.02.2015, 21:20   #5
Bronepoezd
Member
 
Аватар для Bronepoezd
 
Регистрация: 30.12.2011
Адрес: Город на Волге.
Сообщений: 103
По умолчанию

Цитата:
Сообщение от Linka Посмотреть сообщение
а если мне этот массив нужен в последующих вычислениях?
Цитата:
Сообщение от Alarmod Посмотреть сообщение
Когда совсем-совсем не нужен, тогда и освобождайте.
Согласен.

Цитата:
Сообщение от Linka Посмотреть сообщение
чем fixed отличается от setw ()
setw(n) -- выделяет n знаков для вывода числа. Если число занимает меньше знаков, то слева добавляются пробелы. Если больше -- число просто выводится полностью (два длинных числа при выводе подряд могут "склеиться", между ними может не быть пробелов, если их явно не поставить).

При печати вещественного числа по умолчанию выводится 6 знаков после запятой, если не ошибаюсь. Количество знаков регулируется с помощью cout.precision( n ) или setprecision( n ). При этом например 0.5 без fixed напечатается как 0.5, а с fixed как 0.500000. То есть fixed заставляет выводить ровно заданное количество знаков после запятой, не убирая нули в хвосте.
---------
"В билете один вопрос будет сложный, а другой тяжелый."
Bronepoezd вне форума   Ответить с цитированием
Старый 25.02.2015, 07:56   #6
Linka
Advanced Member
 
Аватар для Linka
 
Регистрация: 27.09.2012
Сообщений: 493
По умолчанию

Bronepoezd, спасибо Вам за такой оперативный ответ. Вы мне очень помогли. Я книжку еще не успела по программированию дочитать, а программа для работы понадобилась вот сейчас

Добавлено через 36 секунд
Alarmod, так и буду делать
Linka вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 12:56. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2024, «Аспирантура. Портал аспирантов»
Рейтинг@Mail.ru