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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 19:15   #21
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

Вот, смотри я хочу добавить ввод второго массива/матрицы

у меня получается что вторая матрица/массив вводиться по размерам первого
вот код

Код:
#include <stdlib.h> 
#include <conio.h>
#include <stdio.h>
#define p(a,b) (p + i*na + j)

int na, nb, ma, mb;
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, *q;
	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("\n\nVvedite razmer 2 matrici:\n");
	printf("stroki = ");
	scanf("%d", &ma);
	printf("stolbci = ");
	scanf("%d", &mb);
	   q=(int*)malloc(ma * mb * sizeof(int));
	printf("Vvedite razmer matrici 2:\n");
	vvod(q);
	printf("Ishodnaya matrica 1:\n");
	vivod(p);
	printf("Ishodnaya matrica 2:\n");
	vivod(q);
	getch();
	return 0;
}
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 19:16   #22
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

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

#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#define p(a,b) (p + i*na + j)
#define q(a,b) (q + i*ma + j)

как я понял по-любому надо добавить, но в функциях мы же обращаемся именно к *p(i,j)
А мне нужно обратиться сначала к *p(i,j), а потом к *q(i,j)
как я понял
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 19:20   #24
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Ну или так
но по заданию у тебя второй вроде одномерный
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 19:22   #25
Br0m
Пользователь
 
Регистрация: 25.01.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Inv1s Посмотреть сообщение
Там и не дожно быть 2
двумерный массив же, и если выделять память то
Код:
	p=(int**)malloc(na*sizeof(int));
	for(int i=0; i<na; i++)
		p[i]=(int *)malloc(nb*sizeof(int));
Br0m вне форума Ответить с цитированием
Старый 31.01.2012, 19:22   #26
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

просто проблема в том, что мне ещё потом с ними надо работать

я решил эту задачу, не выделяя динамически память, мне просто сказали подправить её, что бы память динамически выделялась, а я хз как

вот код этой проги
Код:
#include <iostream> 
#include <conio.h>
#include <stdio.h>
using namespace std;
//Функция

void vvod(int x[10][10], int *t1, int *t2)
{
 int i,j;
 printf ("vvod n=");
 scanf ("%d",t1);
 printf ("vvod m=");
 scanf ("%d",t2);
 for (i=0; i<*t1; i++)
	for (j=0; j<*t2; j++) 
       {
           printf("stroka [%d], chislo [%d] = ", i+1, j+1);
           scanf("%d",*(x+i)+j);    
       }
}

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

void NMmin(int x[10][10], int t1, int t2, int *nmin, int *mmin)
{
   int i,j;
   *nmin=-1;*mmin=-1;
   for (i=0;i<t1;i++)
   {
      for(j=0;j<t2;j++)
        if (*(*(x+i)+j)>0) {*nmin=i;*mmin=j;break;}
      if (*nmin!=-1) break;                       
   }
   if (*nmin!=-1)
   {
   for (i=0; i<t1; i++)
   for (j=0; j<t2; j++)
		if ((*(*(x+i)+j)>0)&&(*(*(x+i)+j)<*(*(x+*nmin)+*mmin))) 
        {
           *nmin=i;
           *mmin=j;
        }
   }    
}

void swap(int x[10][10], int y[10][10], int n1, int m1, int n2, int m2)
{
  int c;
  c=*(*(x+n1)+m1);
  *(*(x+n1)+m1)=*(*(y+n2)+m2);
  *(*(y+n2)+m2)=c;       
}

int main ()
{
 int a[10][10],b[10][10];
 int na,ma,nb,mb,nminA,mminA,nminB,mminB;
 printf("Vvod matrici A:\n");
 vvod(a,&na,&ma);
 printf("Vvod matrici B:\n");
 vvod(b,&nb,&mb);
 printf("Ishodnaya matr A:\n");
 vivod(a,na,ma);
 printf("Ishodnaya B:\n");
 vivod(b,nb,mb);
 NMmin(a,na,ma,&nminA,&mminA);
 printf("Matrica A:        N=%d  M=%d\n",nminA+1,mminA+1);
 NMmin(b,nb,mb,&nminB,&mminB);
 printf("Matrica B:        N=%d  M=%d\n",nminB+1,mminB+1);
 if ((nminA!=-1)&&(nminB!=-1)) swap(a,b,nminA,mminA,nminB,mminB);
 printf("New matr A:\n");         
 vivod(a,na,ma);
 printf("New matr B:\n");         
 vivod(b,nb,mb);
 getch();
 return 0;
}
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 19:24   #27
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

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

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

void NMmin(int x[10][10], int t1, int t2, int *nmin, int *mmin)
{
int i,j;
*nmin=-1;*mmin=-1;
for (i=0;i<t1;i++)
{
for(j=0;j<t2;j++)
if (*(*(x+i)+j)>0) {*nmin=i;*mmin=j;break;}
if (*nmin!=-1) break;
}
if (*nmin!=-1)
{
for (i=0; i<t1; i++)
for (j=0; j<t2; j++)
if ((*(*(x+i)+j)>0)&&(*(*(x+i)+j)<*(*( x+*nmin)+*mmin)))
{
*nmin=i;
*mmin=j;
}
}
}

^Вот поиск минимального

void swap(int x[10][10], int y[10][10], int n1, int m1, int n2, int m2)
{
int c;
c=*(*(x+n1)+m1);
*(*(x+n1)+m1)=*(*(y+n2)+m2);
*(*(y+n2)+m2)=c;
}

^Вот их местами меняю
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 19:42   #30
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

нее) это то я понял я про сам код внутри
поиск выглядит так
Код:
int* Find_MAX(int *p, int max_i, int max_j)
{
      int *max = p;
      for(int i = 0; i < max_i; i++)
          for(int j = 0; j < max_j; j++)
              if(*(p+i*max_i + j) > *max) max = (p+i*max_i + j);
      return max;
}
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL

Последний раз редактировалось Inv1s; 31.01.2012 в 19:46.
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