Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2014, 12:46   #1
Jar
 
Регистрация: 03.05.2014
Сообщений: 7
По умолчанию Передача в функцию указателя на функцию C

Функция p3 вызывает функции p1 (которая меняет знак в столбце + на - и наоборот) и p2 (которая ищет сумму отрицательных элементов столбца).


Не могу понять где ошибка при подсчете суммы .
Код:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

void p1(int **arr, int n, int m, int j){
	int i;
	for (i = 0; i < n; i++){
		if (arr[i][j] != 0){
			arr[i][j] = arr[i][j] * (-1);
			printf("%d\t", arr[i][j]);
		}printf("\n");
	}
}


void p2(int **arr, int n, int m, int j){
	int i, S;
	S = 0;
		if (arr[i][j] <= 0){
			S = S + arr[i][j];
			printf("%d Summa otric:", S);
		}
		else {
			printf("V stolbce net otric");
		} 
}


void p3(void p(int **, int, int, int), int **arr, int n, int m, int j){
	int i;
	printf("Viberi stolbec:");
	scanf("%d", &j);
	for (i = 0; i < 1; i++){
      if (arr[0][0] % 2 == 1)
      p(arr, n, m, j);
	  if (arr[0][0] % 2 == 0)
	  printf("ERROR, NE PODXODIT USLOVIU  \n");
	}
}


int main(){
	int **arr;
	int a, n, m, i, j, S;
	int oper;
	printf("Vvedite N:");
	scanf("%d", &n);
	printf("Vvedite M:");
	scanf("%d", &m);
	arr = (int**)malloc(n*sizeof(int *));
	for (i = 0; i < n; i++){
		arr[i] = (int*)malloc(m*sizeof(int));
	}
	srand(time(NULL));
	for (i = 0; i < n; i++){
		for (j = 0; j < m; j++){
			arr[i][j] = rand() % 50 - 25;
			printf("%d\t", arr[i][j]);
		}
		printf("\n");
	}

	for (i = 0; i < n; i++){
		p3(p1, arr, n, m, j);
		p3(p2, arr, n, m, j);
	}
	for (i = 0; i < n; i++){
		free(arr[i]);
		free(arr);
		getch();
		return(0);
	}
}
Jar вне форума Ответить с цитированием
Старый 03.05.2014, 15:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чегот я не пойму:
Цитата:
void p2(int **arr, int n, int m, int j){
int i, S;
S = 0;
if (arr[i][j] <= 0){
S = S + arr[i][j];
А где тут инифиализация переменной i?
На что она указывает? Всмысле какой индекс элемента.
Может лучше так?:
Код:
void p2(int **arr, int n, int m, int j){
	int i, S;
	S = 0;
 for(i=0;i<m;i++)
		if (arr[i][j] < 0)
			S = S + arr[i][j];

		if (S){
			printf("%d Summa otric:", S);
		}
		else {
			printf("V stolbce net otric");
		}
}
Не проверял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2014, 15:31   #3
Jar
 
Регистрация: 03.05.2014
Сообщений: 7
Печаль

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не проверял...
необработанное исключение, нарушение прав доступа
Jar вне форума Ответить с цитированием
Старый 03.05.2014, 16:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так включай моск и начинай думать. Я мог перепутать m и n, поскольку не в курсе что за что отвечает. Отладчиком пройдись в конце концов.
Я тебе просто указал на уязвимое место в программе не более.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача указателя на двумерный массив в функцию morg4n Общие вопросы C/C++ 4 11.04.2013 17:32
передача в функцию указателя на начало массива dasvex Помощь студентам 4 28.08.2011 09:29
Передача в функцию указателя на динамический массив Airou Общие вопросы C/C++ 4 05.05.2011 17:07
Передача указателя на массив в функцию loser Общие вопросы C/C++ 2 19.02.2010 19:41
передача указателя в функцию arturka Помощь студентам 3 06.07.2008 00:25