|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Динамическая память под двумерный массив, где ошибка?) |
|
C/C++ - [решено] Динамическая память под двумерный массив, где ошибка?)
|
Новый участник Сообщения: 34 |
Собственно вот программа
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define N 100 #define M 100 void main() { setlocale(LC_ALL, "Russian"); //int Q[N][M]; //исходная матрица float summa_v_stroke[N]; //int **Q; int l,m; //индексы элементов матрицы int rows,cols; //размер матрицы //Ввод размерности матрицы printf("Введите элементы матрицы\n"); printf("Строки="); scanf("%d", &rows); printf("Столбцы="); scanf("%d", &cols); //Выделение динамической памяти под массив float **Q=(float**) malloc (rows*sizeof(float*)); Q[0]=(float*) malloc (rows*cols*sizeof(float)); for(l=1; l<rows; l++) { Q[l]=Q[0]+l*cols; } // Q=(int**) calloc (rows/cols,sizeof(int*)); // for(int i=0;i<rows/cols;i++) // { // *(Q+i)=(int*) calloc (cols,sizeof(int)); // } //Ввод элементов матрицы printf("Введите элементы матрицы\n"); for(l=0; l < rows; l++) for(m=0; m < cols; m++) scanf("%f", *(*(Q+l)+m)); //Вычисление среднего арифметического в строках матрицы printf("Найдите средние значения строк\n\n"); for(l=0; l < rows; l++) { summa_v_stroke[l]=0; for(m=0; m < cols; m++) { summa_v_stroke[l] +=Q[l][m]; //нахождение суммы элементов в строке } summa_v_stroke[l] = summa_v_stroke[l]/cols; //нахождение среднего арифметического в строке printf("Среднее значение %d строки %.2f\n", l, summa_v_stroke[l]); } printf("\n\n"); //Вывод полученной матрицы printf("Результат:\n"); for(l=0; l < rows; l++) { printf("\n"); for(m=0; m < cols; m++) { Q[l][m] = Q[l][m]-summa_v_stroke[l]; printf("%f\t", Q[l][m]); } printf("\n"); } } П.С при компиляции ошибок нет, но при запуске ![]() |
|
Отправлено: 19:35, 03-06-2010 |
![]() Ветеран Сообщения: 1328
|
Профиль | Отправить PM | Цитировать SeRgikON
Посмотри, так вроде работает: // Помощь.cpp : Defines the entry point for the console application. // //#include "stdafx.h" // // //int _tmain(int argc, _TCHAR* argv[]) //{ // return 0; //} #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define N 100 #define M 100 void main() { setlocale(LC_ALL, "Russian"); //int Q[N][M]; //исходная матрица float summa_v_stroke[N]; //int **Q; int l,m; //индексы элементов матрицы int rows,cols; //размер матрицы //Ввод размерности матрицы cout << "Введите элементы матрицы\n"; cout << "Строки="; cin >> rows; cout << "Столбцы="; cin >> cols; ////////////////Выделение динамической памяти под массив ////////////// float **Q=(float**) malloc (rows*sizeof(float*)); ////////////// Q[0]=(float*) malloc (rows*cols*sizeof(float)); ////////////// for(l=1; l<rows; l++) ////////////// { ////////////// Q[l]=Q[0]+l*cols; ////////////// } float ** Q = new(float* [rows]); for(int i = 0; i < rows; ++i) { Q[i] = new(float[cols]); } // Q=(int**) calloc (rows/cols,sizeof(int*)); // for(int i=0;i<rows/cols;i++) // { // *(Q+i)=(int*) calloc (cols,sizeof(int)); // } ////////////////////Ввод элементов матрицы ////////////////// printf("Введите элементы матрицы\n"); ////////////////// for(l=0; l < rows; l++) ////////////////// for(m=0; m < cols; m++) ////////////////// scanf("%f", *(*(Q+l)+m)); cout << "Введите элементы матрицы\n"; for(l=0; l < rows; l++) for(m=0; m < cols; m++) cin >> Q[l][m]; //Вычисление среднего арифметического в строках матрицы printf("Найдите средние значения строк\n\n"); for(l=0; l < rows; l++) { summa_v_stroke[l]=0; for(m=0; m < cols; m++) { summa_v_stroke[l] +=Q[l][m]; //нахождение суммы элементов в строке } summa_v_stroke[l] = summa_v_stroke[l]/cols; //нахождение среднего арифметического в строке printf("Среднее значение %d строки %.2f\n", l, summa_v_stroke[l]); } printf("\n\n"); //Вывод полученной матрицы printf("Результат:\n"); for(l=0; l < rows; l++) { printf("\n"); for(m=0; m < cols; m++) { Q[l][m] = Q[l][m]-summa_v_stroke[l]; printf("%f\t", Q[l][m]); } printf("\n"); } int x; cin >> x; } |
------- Отправлено: 20:55, 03-06-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 34
|
Профиль | Отправить PM | Цитировать спасибо) но нужно прогу на С (ввод\вывод и динамика на С++ не прокатит) и поэтому проверил свой код в момент ввода элементов...оказалось просто пропустил & и из-за него весь геморой
![]() |
Отправлено: 21:36, 03-06-2010 | #3 |
ИО Капитана Очевидности Сообщения: 5387
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 06:05, 04-06-2010 | #4 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать почему в C++ считается что va_args - это порождение зла? потому что нет контроля типов. Вот и ошибка:
printf("Введите элементы матрицы\n"); for(l=0; l < rows; l++) for(m=0; m < cols; m++) scanf("%f", *(*(Q+l)+m)); вот так будет работать: |
|
Отправлено: 18:31, 04-06-2010 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скажите под какую память этот разъем? | vasya0348 | Материнские платы и память | 7 | 20-08-2009 02:51 | |
[решено] где взять драйвер для Сanon MF3228 под 2003 сервер | Anatoliy2004 | Поиск драйверов, прошивок и руководств | 2 | 11-06-2009 16:59 | |
Как правильно выбрать память под чипсет? | borison | Материнские платы и память | 3 | 04-01-2009 11:48 | |
Где производят оригинальную память? | D@n1k007 | Материнские платы и память | 5 | 20-05-2008 21:35 | |
Динамическая библеотека | Guest | Microsoft Windows 95/98/Me (архив) | 3 | 19-10-2003 21:33 |
|