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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2014, 02:35   #1
Margana17
Пользователь
 
Аватар для Margana17
 
Регистрация: 31.12.2013
Сообщений: 15
Вопрос язык Си: написать функцию, которая ищет сумму модулей элементов

Приветнужно написать функцию которая ищет сумму модулей элементов . как изменить обычную функцию суммы?
Код:
int xsum(int m,int p,int **b)
{
int i,s;
for(i=s=0;i<m;i++)
	s+=b[p][i];
	return s;
}
помогите пожалуйста..
Margana17 вне форума Ответить с цитированием
Старый 07.01.2014, 02:42   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
s+=abs(b[p][i]);
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 07.01.2014, 02:47   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вместо этого
Код:
s+=b[p][i];
вот это
Код:
s+=((b[p][i]<0)?-b[p][i]:b[p][i]);
type_Oleg вне форума Ответить с цитированием
Старый 08.01.2014, 14:59   #4
Margana17
Пользователь
 
Аватар для Margana17
 
Регистрация: 31.12.2013
Сообщений: 15
Сообщение

спасибо вам большое
Margana17 вне форума Ответить с цитированием
Старый 08.01.2014, 21:27   #5
Margana17
Пользователь
 
Аватар для Margana17
 
Регистрация: 31.12.2013
Сообщений: 15
Вопрос

неправильно считает произведение эл-в, посмотрите что не так?

Код:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
void xpmin(int n,int *x,int *z,int *r)
{
int i;
*r=0;
for(i=1;i<n;i++)
	if(x[i]<x[*r])
		*r=i;
		*z=x[*r];
}
int xpro(int m,int *x)
{
int p,i;
p=1;
for(i=0;i<m;i++)
	if(x[i]!=0)
	p*=x[i];
return(p);
}
main()
{
int **a,n,m,i,j,p,pol,znach,k,*y;
FILE *in;
clrscr();
in=fopen("massiv.dat","r");
printf(" n m:");
scanf("%d%d",&n,&m);
a=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
	a[i]=(int*)malloc(m*sizeof(int));
for(i=0;i<n;i++)
	for(j=0;j<m;j++)
		fscanf(in,"%d",&a[i][j]);
for(i=0;i<n;i++)
	{
	for(j=0;j<m;j++)
		printf("%3d",a[i][j]);
	printf("\n");
	}
printf("\n\n k:");
scanf("%d",&k);
y=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
	y[i]=a[i][k-1];
for(i=0;i<n;i++)
	printf("%5d",a[i][k-1]);
xpmin(n,y,&znach,&pol);
printf("\n\n значение мин %d \n\n положение мин %d \n\n",znach,pol);
printf("\n\n строка с мин :\n");
for(i=0;i<m;i++)
	printf("%5d",a[pol][i]);
p=xpro(m,a);
printf("\n произведение ненулевых %d",p);
getch();
}
Margana17 вне форума Ответить с цитированием
Старый 08.01.2014, 22:00   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вы вызываете xpro(m,a) - но a не массив int, а массив указателей на массивы int. Сейчас Вы умножаете адреса, а не элементы. Если нужно получить произведение в какой-либо строке, то вызывать функцию нужно как xpro(m,a[i]), а если в столбце, то придется или завести временный массив для элементов столбца (мне не нравится такой способ), или переделать функцию, чтобы она принимала номер столбца, длину столбца, указатель на двухмерный массив.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.01.2014, 23:28   #7
Margana17
Пользователь
 
Аватар для Margana17
 
Регистрация: 31.12.2013
Сообщений: 15
Сообщение я создала еще массив х...и теперь программа работает

может можно все это проще сделать..
Код:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
void xpmin(int n,int *x,int *z,int *r)
{
int i;
*r=0;
for(i=1;i<n;i++)
	if(x[i]<x[*r])
		*r=i;
		*z=x[*r];
}
int xpro(int m,int *x)
{
int p,i;
p=1;
for(i=0;i<m;i++)
	if(x[i]!=0)
	p*=x[i];
return(p);
}
main()
{
int **a,n,m,*x,i,j,p,pol,znach,k,*y;
FILE *in;
clrscr();
in=fopen("massiv.dat","r");
printf(" n m:");
scanf("%d%d",&n,&m);
a=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
	a[i]=(int*)malloc(m*sizeof(int));
for(i=0;i<n;i++)
	for(j=0;j<m;j++)
		fscanf(in,"%d",&a[i][j]);
for(i=0;i<n;i++)
	{
	for(j=0;j<m;j++)
		printf("%3d",a[i][j]);
	printf("\n");
	}
printf("\n\n  k:");
scanf("%d",&k);
y=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
	y[i]=a[i][k-1];
for(i=0;i<n;i++)
	printf("%5d",a[i][k-1]);
xpmin(n,y,&znach,&pol);
printf("\n\n значение мин %d \n\n положение мин %d \n\n",znach,pol);
x=(int*)malloc(m*sizeof(int));
printf("\n\n строка с мин :\n");
for(i=0;i<m;i++)
	printf("%5d",a[pol][i]);
for(i=0;i<m;i++)
x[i]=a[pol][i];
p=xpro(m,x);
printf("\n произведение ненулевых",p);
getch();
}
Margana17 вне форума Ответить с цитированием
Старый 08.01.2014, 23:31   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

В данном случае можно проще - по идее, должно сработать xpro(m,a[pol]); вместо создания лишнего массива.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.01.2014, 23:37   #9
Margana17
Пользователь
 
Аватар для Margana17
 
Регистрация: 31.12.2013
Сообщений: 15
Радость

да, с a[pol] работает все..проверила только что
Margana17 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить сумму модулей элементов, расположенных на главной диагонали. Misha_Sil Помощь студентам 0 17.02.2013 00:17
написать и протестировать функцию str_s( str1, str2) которая ищет в строке str1 какой-нибудь символ из строки str2 функция возвр it_uu Помощь студентам 1 18.01.2013 09:05
написать программу которая вводит по строкам с квеатуры двумерные массивы и вычисляет сумму его элементов по строкам таня99 Паскаль, Turbo Pascal, PascalABC.NET 3 23.05.2012 20:23
Массив найти сумму модулей элементов tanyuxxxa Помощь студентам 7 20.03.2012 02:22