0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
|
|
1 | |
Посчитать сумму каждого столбца матрицы,номер которого не является элементом одномерного массива.29.12.2008, 11:22. Показов 2612. Ответов 14
Метки нет (Все метки)
Огрррромная просьба!!!Все есть и условие и программа,но!!!!
Условие:Дана Двумерная матрица m*n и одномерный массив,посчитать сумму каждого столбца матрицы,номер которого не является элементом одномерного массива.Счет столбцов в моей проге идет с нулегого. Загвоз вот в чем: Код
#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include<string.h> #include <fstream.h> const int N=499; int m,i; const unsigned n=9; int kol,b,a,c,d; void output(char *t, int tmass) { printf(t, tmass); } void InpFile(char *NameF, int *x) { m=0; ifstream finput; finput.open(NameF); finput>>x[m]; while (!finput.eof()) { m++; finput>>x[m]; if(m>N){ printf("nelzia schitat "); break;} } finput.close(); } void printMass(int co1, int co2, int **tmass) { for( int i = 0; i < co1; i++ ) { for( int j = 0; j < co2; j++ ) { output(" %d\t", tmass[i][j]); } output("\n", 0); } } int** getMassFromFile( char *fname, int &count1, int &count2 ) { FILE *file = fopen( fname, "r" ); if( file == NULL ) return NULL; char str[512], *pstr; count1 = 0; count2 = 0; int **mass; memset( str, 0, 512 ); while( ( fgets( str, 511, file) ) && (count1<500) ) { count2 = 0; pstr = strtok( str, " " ); do { count2++; pstr = strtok( NULL, " " ); } while( pstr ); count1++; memset( str, 0, 512 ); } mass = new int*[count1]; for( int a = 0; a < count1; a++ ) { mass[a] = new int [count2]; } fseek( file, 0, SEEK_SET ); count1 = 0; while( fgets( str, 511, file) ) { count2 = 0; pstr = strtok( str, " " ); do { mass[count1][count2] = atoi(pstr); count2++; pstr = strtok( NULL, " " ); } while( pstr ); count1++; memset( str, 0, 512 ); } printMass(count1, count2, mass); fclose( file ); return mass; } int main (void) { int **array; int i,j; printf("Load source file data: \n "); array=getMassFromFile( "input.txt", i, j ); FILE *ofile = fopen ("mask.txt", "r"); int maskArray[N]; InpFile("mask.txt", maskArray); int n,m,sum=0; for(n=0;n<co1;n++) { printf("%d ",maskArray[n]); } n=0; for(n=0;n<co1;n++) { if(maskArray[n]==array[0][n]) { for (m=0; m<co2;m++) sum+=array[m][n]; printf("Summa %d \n",sum); } } FILE *wfile = fopen ("arrayOuput.txt", "w"); fprintf(wfile, "%d\n", sum ); fclose(wfile); return 1; } или перепишите ее...
0
|
29.12.2008, 11:22 | |
Ответы с готовыми решениями:
14
Напечатать минимальный элемент столбца матрицы А, номер которого равен максимальному элементу одномерного массива В Посчитать сумму каждого столбца матрицы Вывести номер каждого столбца матрицы, сумма элементов которого меньше нуля Вывести номер каждого столбца матрицы, элементы которого имеют совпадающие значения |
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
30.12.2008, 01:32 | 2 | |||||
0
|
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
|
|
30.12.2008, 18:22 [ТС] | 3 |
Хех,ввод и вывод опять из файлов....
Добавлено через 13 часов 9 минут 53 секунды А можно переделать ее,чтобы ввод и вывод с файлов????? И чтобы если введены в матрице символы воспринимал их как 0,и если размер матрицы в файле больше размера в программие,выдавал об этом сообщение или хоть как0то решалась эта проблема!!!! очень-очень срочно!!!
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
31.12.2008, 01:39 | 4 | |||||
Код
0 1 2 3 4 5 6 7 8 9 1 1 Код
[guest@localhost tmp]$ ./matrix 0 1 2 3 4 5 6 7 8 9 1 1 [guest@localhost tmp]$ это просто ввод матрицы из файла
0
|
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
|
|
31.12.2008, 02:04 [ТС] | 5 |
Я вас и вправду люблю!!!!вы гений!!!
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
31.12.2008, 06:30 | 6 | |||||
Код
0 1 2 3 4 5 6 7 8 9 1 1 4 5 7 8 Код
12 3 0 10 11 Код
20 16
0
|
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
|
|
31.12.2008, 12:39 [ТС] | 7 |
Оооой....у меня не пашит,пишет,что проблема с
Код
if ((mtx = calloc(m, sizeof(int *))) == NULL) return NULL; for (i = 0; i < m; i++) if ((mtx[i] = calloc(n, sizeof(int))) == NULL) { error: invalid conversion from `void*' to `int*' error: invalid conversion from `void*' to `int**' Добавлено через 1 минуту 47 секунд Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины если не труднго,помогите и с этой,числа до 3-го.... Очень прошу...
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
31.12.2008, 12:45 | 8 |
вот так напиши:
if ((mtx = calloc(m, sizeof(int))) == NULL) - убери звездочку
0
|
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
|
|
31.12.2008, 13:45 [ТС] | 9 |
Спасибо
0
|
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
|
|
04.01.2009, 16:44 [ТС] | 11 |
accept,
Я ЛЮБЛЮ ВАС!!! ВСЕ РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!! ВЫ ГЕНИЙ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Добавлено через 3 минуты 7 секунд Спасибо Вам огромное! Вы гений! Все работает идеально!!!!))))))))))
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
||||||
04.01.2009, 16:59 | 12 | |||||
accept, я, конечно, в ваш код несильно углублялся. но найди мне 10 отличий в таком коде:
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
05.01.2009, 00:31 | 13 |
WooDooMan, короче по стандарту операция присваивания производит преобразование типа правого операнда к типу левого. Имплицитное преобразование типов.
Так же по стандарту указатель на void можно присваивать указателю на любой другой тип без явного приведения, потому что стандарт гарантирует правильное сохранение значения указателя и указателю на void можно присваивать указатель любого типа без явного приведения потому что тоже всё сохраняется в правильном виде на любой системе. Её компилятор не знает этой особенности и потребовал явного приведения, я его вставил. твой код Код
int** m = (int**) calloc(5, sizeof(int)); в принципе если ты запишешь правильный адрес в такое число, оно будет приведено к типу указателя и ты можешь даже его разыменовать и получить правильное значение, хранящеется по тому адресу следующий твой код Код
int** n = (int**) calloc(5, sizeof(int*));
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
05.01.2009, 01:05 | 14 |
accept, ну вот объяснил ламеру без крика и пыли, буду знать, потому что я всегда для двумеров выделял 4 байта, как приводил в пример, работало ну и славно... теперь буду знать...
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
05.01.2009, 03:33 | 15 |
не просто не разобравшись стал код менять, одно дело ошибиться другое профанация (когда портят из-за незнания)
0
|
05.01.2009, 03:33 | |
05.01.2009, 03:33 | |
Помогаю со студенческими работами здесь
15
Как посчитать сумму каждого столбца матрицы? Посчитать сумму для каждого столбца матрицы Посчитать сумму каждого столбца массива Посчитать сумму столбцов двухмерного массива и вывести сумму каждого столбца в одномерный массив Посчитать сумму элементов каждого столбца матрицы с помощью процедуры Посчитать сумму элементов каждого столбца и каждой строки матрицы 3х3 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |