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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 00:19   #1
lutuygrey1
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 30
По умолчанию си/си++.

у меня в программе написано вроде всё правильно а при компиляции есил я ввожу 2 и 3 то мне выдаёт такую матрицу
0 0 -23526
0 0 -23544
массив сумм
-2325 -2346
Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{int i,j,n,m;
int **masa;
int *masb;
printf("\n текст"
" текст \n");
scanf("%d%d",&n,&m);
printf("\n текст \n ",n,m);
masa=(int**)calloc(m,sizeof(*masa)) ;
for(i=0;i<n;i++)
masa[i]=(int*)calloc(n,sizeof(*masa[i]));
fflush(stdin);
printf("\n исходный масив n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%7d",masa[i][j]);
}
printf("\n");
}
masb=(int*)calloc(n,sizeof(masb));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
masb[i]=masb[i]+masa[i][j];
printf("\n бд®а¬Ёа®ў***л© ¬*ббЁў б㬬 ");
printf("\n");
for(i=0;i<n;i++)
printf("%7d",masb[i]);
for(i=0;i<n;i++)
free(masa[i]);
free(masa);
free(masb);
getch();
return 0;
}
программа работает только не так как надо м.б. ошибка в выделении или я строчки не так поставил что прога выделяет неправильно динамическую память
как сделать так чтобы при компиляции были нормальные целые числа?
заранее спасибо

Последний раз редактировалось Stilet; 02.11.2009 в 08:13.
lutuygrey1 вне форума Ответить с цитированием
Старый 02.11.2009, 02:52   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Крайне нечитабельно=\
Почему calloc, а не malloc? =)

Код:
masa=(int**)calloc(m,sizeof(*masa)) ;
masa[i]=(int*)calloc(n,sizeof(*masa[i]));
masb=(int*)calloc(n,sizeof(masb));
->
Код:
masa=(int**)calloc(m,sizeof(int)) ;
masa[i]=(int*)calloc(n,sizeof(int));
masb=(int*)calloc(n,sizeof(int));
Там надо писать размер одного элемента. А вы пишите размер от указателя =)
TwiX вне форума Ответить с цитированием
Старый 06.11.2009, 22:44   #3
lutuygrey1
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 30
По умолчанию

пробовал =теперь вместо этого все нули в исходной матрице и в результирующем массиве. если через функцию malloc делать то будет так
masa=(int**)malloc(m,sizeof(int)) ;
masa[i]=(int*)malloc(n,sizeof(int));
masb=(int*)malloc(n,sizeof(int));?? ???????????????
lutuygrey1 вне форума Ответить с цитированием
Старый 06.11.2009, 22:58   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

что-то не видно, где вы заполняете этот массив значениями...
counter вне форума Ответить с цитированием
Старый 07.11.2009, 22:37   #5
lutuygrey1
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 30
По умолчанию

c помощью функции calloc заполняется массив..

может надо так написать
Код:
masa=(int**)malloc(**n,sizeof(int)) ;
masa[i]=(int*)malloc(*m,sizeof(int));
masb=(int*)malloc(**n,sizeof(int))

Последний раз редактировалось Stilet; 09.11.2009 в 10:29.
lutuygrey1 вне форума Ответить с цитированием
Старый 08.11.2009, 03:35   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
masa=(int**)calloc(n,sizeof(int)) ;
for(i=0;i<n;i++)
masa[i]=(int*)calloc(m,sizeof(int));
...
masb=(int*)calloc(n,sizeof(int));
Цитата:
c помощью функции calloc заполняется массив..
нулями...
counter вне форума Ответить с цитированием
Старый 08.11.2009, 13:33   #7
lutuygrey1
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 30
По умолчанию

а чтобы натуральными числами заполнялся то нужно через malloc делать?
lutuygrey1 вне форума Ответить с цитированием
Старый 08.11.2009, 16:05   #8
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от lutuygrey1 Посмотреть сообщение
а чтобы натуральными числами заполнялся то нужно через malloc делать?
для этого нужно их вводить вручную

Код:
for(i=0;i<n;i++)
{
   for(j=0;j<m;j++)
   {
          printf("\nmas[%d][%d] = ",i,j);
          scanf("%d",&mas[i][j]);
   }
}
или рандомно

Код:
#include <time.h>
...

srand(time(0));
for(i=0;i<n;i++)
{
   for(j=0;j<m;j++)
   {
        mas[i][j]=rand()%10;
   }
}
counter вне форума Ответить с цитированием
Старый 08.11.2009, 18:26   #9
lutuygrey1
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 30
По умолчанию

Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{int i,j,n,m;
int **masa;
int *masb;
printf("\n текст"
" текст \n");
scanf("%d%d",&n,&m);
printf("\n текст \n ",n,m);
masa=(int**)calloc(m,sizeof(*masa)) ;
for(i=0;i<n;i++)
masa[i]=(int*)calloc(n,sizeof(*masa[i]));
fflush(stdin);
printf("\n исходный масив n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%7d",masa[i][j]);
}
printf("\n");
}
masb=(int*)calloc(n,sizeof(masb));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
masb[i]=masb[i]+masa[i][j];
printf("\n  массив b");
printf("\n");
for(i=0;i<n;i++)
printf("%7d",masb[i]);
for(i=0;i<n;i++)
free(masa[i]);
free(masa);
free(masb);
getch();
return 0;
}
если так писать то результат остаётся одним и тем же только выаётся сообщение введите 64 стоки по 1024 сивола

Последний раз редактировалось Stilet; 09.11.2009 в 10:31.
lutuygrey1 вне форума Ответить с цитированием
Старый 08.11.2009, 20:42   #10
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

lutuygrey1, ты долго будешь одно и то же переписывать тут? А то, что тебе пишут ты вообще читаешь?

Цитата:
если так писать то результат остаётся одним и тем же только выаётся сообщение введите 64 стоки по 1024 сивола
это вообще откуда взялось? ты вообще этот код сам написал(а)?

вот рабочий вариант

Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>

int main(void)
{
	int i,j,n,m;
	int **masa;
	int *masb;
	
	printf("\n M N\n");
	scanf("%d%d",&n,&m);
	
	masa=(int**)calloc(n,sizeof(int));
	for(i=0;i<n;i++)
		masa[i]=(int*)calloc(m,sizeof(int));
	fflush(stdin);
	printf("\nMass A\n");
	
	srand(time(0));
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			masa[i][j]=rand()%10;
			printf("%7d",masa[i][j]);
		}
		printf("\n");
	}
	
	masb=(int*)calloc(n,sizeof(masb));
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			masb[i]=masb[i]+masa[i][j];
	printf("\nMass B");
	printf("\n");
	
	for(i=0;i<n;i++)
		printf("%7d",masb[i]);
	
	for(i=0;i<n;i++)
		free(masa[i]);
	free(masa);
	free(masb);
	getch();
	return 0;
}
counter вне форума Ответить с цитированием
Ответ


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