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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 18:37   #11
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Точно) гениально)
У тебя получилось как, память то ты выделил под двухмерный массив, но представил его в виде одномерного.
Чтобы обратиться к элементу тебе надо
p + i*na + j

P.S.. для удобства можно забиндить
Код:
#define (p + a*na + b) p(a,b)
и вызывать уже как p(i,j)
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:49   #12
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Inv1s Посмотреть сообщение
Точно) гениально)
У тебя получилось как, память то ты выделил под двухмерный массив, но представил его в виде одномерного.
Чтобы обратиться к элементу тебе надо
p + i*na + j

P.S.. для удобства можно забиндить
Код:
#define (p + a*na + b) p(a,b)
и вызывать уже как p(i,j)
скорее всего я - тупой, но не работает. (компилируется, но не работает)
вот код который получился

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

void vvod(int *p, int t1, int t2, int na)
{
printf ("\n\nVvedite elementi massiva:\n\n");
for (int i=0; i<t1; i++)
for (int j=0; j<t2; j++)
{
printf(" stroka %d, chislo %d = ", i+1, j+1);
scanf("%d", &p + i*na + j);
} 
}

void vivod(int *p, int t1, int t2, int na)
{
int i,j;
for (i=0; i<t1; i++)
{
for (j=0; j<t2; j++) printf("%5d",p + i*na + j); 
printf("\n"); 
} 
}

int main()
{
int *p;
int na, nb, t1, t2;
printf("Razner 1 matrici:\n");
printf("stroki = ");
scanf("%d", &na);
printf("stolbci = ");
scanf("%d", &nb);
p=(int*)calloc((na*nb),sizeof(int));
vvod(p, t1, t2, na);
printf("Ishodnaya matrica 1:\n");
vivod(p, t1, t2, na);
getch();
return 0;
}
программа - ок копилируется.
Запускаю я её - ввожу размеры например 2х2
он мне даёт ввести вместо 4х чисел - 7, и потом на экране появляется куча рандомных бегущих чисел
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 18:53   #13
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

А что такое у тебя в майне t1 и t2?
Ты вызываешь функцию когда им не присвоено значение
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:55   #14
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

+надо учитывать что ещё по заданию должен быть 1 массив одномерный

вот как само задание звучит:

Поменять местами наименьшие из положительных элементов массивов А (55) и В (8х7)

Но сказал, чтобы память выделял динамечески.
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 18:57   #15
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Вот твоя рабочая программа, что такое t1 и t2 в main я не понял и удалил)
Код:
#include <stdlib.h> 
#include <conio.h>
#include <stdio.h>
#define p(a,b) (p + i*na + j)

int na, nb;

void vvod(int *p)
{
	printf ("\n\nVvedite elementi massiva:\n\n");
	for (int i=0; i<na; i++)
		for (int j=0; j<nb; j++)
		{
			printf(" stroka %d, chislo %d = ", i+1, j+1);
			scanf("%d", p(i,j));
		} 
}

void vivod(int *p)
{
	for (int i=0; i<na; i++)
	{
		for (int j=0; j<nb; j++) 
			printf("%d ", *p(i,j)); 
		printf("\n"); 
	} 
}

int main()
{
	int *p;
	printf("Razner 1 matrici:\n");
	printf("stroki = ");
	scanf("%d", &na);
	printf("stolbci = ");
	scanf("%d", &nb);
	p=(int*)malloc( na * nb * sizeof(int));
	printf("Vvedite razmer matrici 1:\n");
	vvod(p);
	printf("Ishodnaya matrica 1:\n");
	vivod(p);
	getch();
	return 0;
}
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 19:01   #16
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

ну эт моя ошибка, я просто не с нуля писал, а предведущую прогу исправлял

вот что будет если поменять



ну на самом деле друг сейчас помог подправить - вот какой код получился

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

void vvod(int **p, int t1, int t2)
{
int i, j;
printf ("\n\nVvedite elementi massiva:\n\n");
for (i=0; i<t1; i++)
for (j=0; j<t2; j++)
{
printf(" stroka %d, chislo %d = ", i+1, j+1);
scanf("%d", (p+i*t1+j));
} 
}

void vivod(int **p, int t1, int t2)
{
int i,j;
for (i=0; i<t1; i++)
{
for (j=0; j<t2; j++)
printf("%5d",*(p+i*t1+j)); 
printf("\n"); 
} 
}

int main()
{
int na, nb, **p;
printf("Razner 1 matrici:\n");
printf("stroki = ");
scanf("%d", &na);
printf("stolbci = ");
scanf("%d", &nb);
p=(int**)calloc(na*nb,sizeof(int));
printf("Vvedite razmer matrici 1:\n");
vvod(p,na,nb);
printf("Ishodnaya matrica 1:\n");
vivod(p,na,nb);
getch();
free(p);
return 0;
}
ну я не очень понял зачем перед p - две звёздочки **p
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 19:03   #17
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Там и не дожно быть 2
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 19:04   #18
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Странный код, ну да ладно
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 19:07   #19
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Inv1s Посмотреть сообщение
Там и не дожно быть 2
спасибо, за код!)
правда я не вкуриваю что делает строчка

#define p(a,b) (p + i*na + j)

а остальное вроде понял

а если мне сюда ещё ввод, вывод массива надо будет добавить - всё ок будет?
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 19:09   #20
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Она заменяет написанное, чисто для удобства чтобы не писать 100 раз сложение указателей.

Сюда это куда? В коде он есть, твои же 2 процедуры остались
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение динамической памяти под правый треугольник квадратной матрицы Assasin92 Общие вопросы C/C++ 0 30.10.2010 23:14
Динамическое выделение памяти под массив объектов со специализированным конструктором capta1n Общие вопросы C/C++ 6 07.03.2010 16:01
Задача на массивы.Язык С.Динамическое распределение памяти Bella Помощь студентам 1 22.10.2009 17:45
динамическое выделение памяти под верхний треугольник квадратной матрицы juventine Помощь студентам 2 12.04.2009 13:02
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52