|
24.02.2015, 18:21 | #1 |
Advanced Member
Регистрация: 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; } |
Реклама | |
|
24.02.2015, 18:47 | #2 |
Member
Регистрация: 30.12.2011
Адрес: Город на Волге.
Сообщений: 103
|
Компилятора под рукой нет, но
int c; пожалуй лучше заменить на double c; Ведь это переменная для обмена местами двух элементов вещественного массива. Так? Можно ещë при выводе поставить cout << fixed << то, что нужно напечатать ; Да и в конце память, выделенную под массив, лучше освободить с помощью оператора delete. |
---------
"В билете один вопрос будет сложный, а другой тяжелый."
|
|
24.02.2015, 19:15 | #3 | |
Advanced Member
Регистрация: 27.09.2012
Сообщений: 493
|
Bronepoezd, точно, помогло!!!!! спасибо огромное.
Добавлено через 5 минут Цитата:
Добавлено через 9 минут а еще, если в двух словах, чем fixed отличается от setw ()? и так, и так работает хорошо |
|
24.02.2015, 20:01 | #4 |
Advanced Member
Регистрация: 21.06.2012
Адрес: Переславль-Залесский
Сообщений: 434
|
Когда совсем-совсем не нужен, тогда и освобождайте.
|
24.02.2015, 21:20 | #5 |
Member
Регистрация: 30.12.2011
Адрес: Город на Волге.
Сообщений: 103
|
Согласен.
setw(n) -- выделяет n знаков для вывода числа. Если число занимает меньше знаков, то слева добавляются пробелы. Если больше -- число просто выводится полностью (два длинных числа при выводе подряд могут "склеиться", между ними может не быть пробелов, если их явно не поставить). При печати вещественного числа по умолчанию выводится 6 знаков после запятой, если не ошибаюсь. Количество знаков регулируется с помощью cout.precision( n ) или setprecision( n ). При этом например 0.5 без fixed напечатается как 0.5, а с fixed как 0.500000. То есть fixed заставляет выводить ровно заданное количество знаков после запятой, не убирая нули в хвосте. |
---------
"В билете один вопрос будет сложный, а другой тяжелый."
|
|
25.02.2015, 07:56 | #6 |
Advanced Member
Регистрация: 27.09.2012
Сообщений: 493
|
Bronepoezd, спасибо Вам за такой оперативный ответ. Вы мне очень помогли. Я книжку еще не успела по программированию дочитать, а программа для работы понадобилась вот сейчас
Добавлено через 36 секунд Alarmod, так и буду делать |