Перейти к содержимому

Фото
- - - - -

Нелп Мтарицы в С


  • Вы не можете создать новую тему
  • Please log in to reply
14 ответов в этой теме

#1 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 04 декабря 2005 - 20:47

КОд
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <conio.h>
#define SIZE 4 
int matrix[SIZE][SIZE]; 
void ask(int choice);
void changeRead();
void changeVeergud();
void showmatrix();
void diagmin();
void diagallmax();

int main()
{
      int i, j;
      int choice;
      int max;
	printf("Sissestage max: \n");
	scanf("%d", &max);
	if (max<0 || max>999){
	printf("Sorry ...\n");}
	else
	{ 
      for(i=0; i<SIZE; i++ ) { 
         printf("\n");           
         for (j=0; j<SIZE; j++) {  
             
             matrix[i][j] = 1.0 + (int) ( (max * rand()) / (RAND_MAX + 1.0) );
             
             printf("%2d ", matrix[i][j]);
         }
      }
      }
      printf("\n");
      
      ask(choice);
      diagmin();
      
      return 0;
}
void showmatrix()
{
     int i, j;
      for(i=0; i<SIZE; i++ ) { 
         printf("\n");           
         for (j=0; j<SIZE; j++) {          
             printf("%2d ", matrix[i][j]);
         }
      }
}


void ask(int choice)
{
	printf("Mida soovite vahetada, kas read(0) voi veerud(1)?: \n");
	scanf("%d", &choice);
	if (choice == 0){
  changeRead();
	}
	else if (choice == 1){
  changeVeergud();
	}
	else
	{ 
  printf("Sorry ... sisestage ainult 1 vqi 0!\n"); 
	}
}	
void changeRead()
{
	int abi;
    int rida1, rida2; 
    int j; 
	printf("Milliseid kahte rida te soovite omavahel vahetada? \n");
	scanf("%d", &rida1);
	scanf("%d", &rida2);
	if (rida1<0 || rida2<0 || rida1<=SIZE || rida2<=SIZE){ 
        for (j=0; j<SIZE; j++){
  abi=matrix[rida1][j];
  matrix[rida1][j]=matrix[rida2][j];
  matrix[rida2][j]=abi;
	}
	showmatrix();
	getch();
}
else
{ 
  printf("Sorry ... error!\n"); 
	}  	
}
void changeVeergud()
{
	int abi1, verg1, verg2, i;
	printf("Milliseid kahte veergu te soovite omavahel vahetada? \n");
	scanf("%d", &verg1);
	scanf("%d", &verg2);
	if (verg1<0 || verg2<0 || verg1<=SIZE || verg2<=SIZE){ 
	for (i=0; i<SIZE; i++){
  abi1=matrix[i][verg1];
  matrix[i][verg1]=matrix[i][verg2];
  matrix[i][verg2]=abi1;
	}  
  showmatrix();
   getch();
      }
      else
{ 
  printf("Sorry ... error!\n"); 
	}
}

в нем все ок .. далее идёт задание такого
Leida k?ldiagonaali kohal olevatest elementidest minimaalne, k?ldiagonaali all olevatest elementidest maksimaalne ning vahetada omavahel nende asukohad.

кыргдиагональ это справа сверху начинается и кончается внизу слева . я так понял что условия таковы i+j>SIZE-1 это когда под кыргдиагональю, i+j<SIZE-1 это когда над ... а собсно как осуществить само задание то) вот в чём вопрос..
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#2 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 декабря 2005 - 21:50

вопрос о том, чтобы найти мин и макс НА диагонали или НАД ней и ПОД ней? eсли над и под, то елементы на самой диагонали относятся к над или под?
  • 0
int main(void)

#3 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 04 декабря 2005 - 21:57

вопрос о том, чтобы найти мин и макс НА диагонали или НАД ней и ПОД ней? eсли над и под, то елементы на самой диагонали относятся к над или под?

Просмотреть сообщение

над и под ... а не на самой даагонали .. элементы самой не относятся

максимум под ней вроде нашёл так:
void diagallmax(){
     int i, j;
     int b;
     b = SIZE-1;
     int suurim=0;
    if (i+j > b){ 
  for(i=0; i<SIZE; i++ ) {
         for (j=0; j<SIZE; j++) {
               if (matrix[i][j] > suurim) {
                suurim = matrix[i][j];
             }
         }
      }
      }
      printf("\nKorvadiagonaali alustest suurim element on %d \n", suurim);        
    getch();
}

а вот минимум над ней пока нет ..
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#4 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 декабря 2005 - 22:27

над и под ... а не на самой даагонали .. элементы самой не относятся

максимум под ней вроде нашёл так:

void diagallmax(){
     int i, j;
     int b;
     b = SIZE-1;
     int suurim=0;
    if (i+j > b){ 
  for(i=0; i<SIZE; i++ ) {
         for (j=0; j<SIZE; j++) {
               if (matrix[i][j] > suurim) {
                suurim = matrix[i][j];
             }
         }
      }
      }
      printf("\nKorvadiagonaali alustest suurim element on %d \n", suurim);        
    getch();
}

неправильно :) , хотя бы потому, что i и j еше не имеют значения когда идет проверка: if (i+j > B )

правильно будет так:
 int a[N][N];
 int min = a[0][N-1];
 int max = 0;
 int i, k;

// fill the matrix
...
 
//min
for (i = 0; i < N; i++)
{
  for (k = 0; k < N-1 - i; k++)
  {
    if (min > a[i][k]) min = a[i][k];
  }
}

//max
for (i = 0; i < N; i++)
{   
  for (k = N-1; k > N-1 - i; k--)
  {
    if (max < a[i][k]) max = a[i][k];
  }
}

Добавлено в [mergetime]1133728075[/mergetime]
ошибочка, не max = min, a max = 0, исправил.

Сообщение изменено: V^v (04 декабря 2005 - 22:48 )

  • 0
int main(void)

#5 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 04 декабря 2005 - 22:44

как это не имеют .. в майн функции же генерировалась матрица уже .?

Добавлено в [mergetime]1133729079[/mergetime]
и что за а[0] ?? где она задекларированна??
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#6 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 декабря 2005 - 22:46

переменные i и j в main - локальны для main, в diagallmax() локальны для diagallmax(), то есть ето совершенно разные переменные, у них только имена обшие. если хочешь чтобы они были везде глобальными обьяви их вне функции

Добавлено в [mergetime]1133729194[/mergetime]
a[N][N] -- матрица. я думал будет понятно, сейчас исправлю.
  • 0
int main(void)

#7 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 04 декабря 2005 - 22:49

мне как бы это надо узнать из ужеготовой матрицы..

Добавлено в [mergetime]1133729383[/mergetime]

переменные i и j в main - локальны для main, в diagallmax() локальны для diagallmax(), то есть ето совершенно разные переменные, у них только имена обшие. если хочешь чтобы они были везде глобальными обьяви их вне функции

Добавлено в [mergetime]1133729194[/mergetime]
a[N][N] -- матрица. я думал будет понятно, сейчас исправлю.

Просмотреть сообщение

то что матрица понятно ... но ведь она будет генерироваться не с теми условиями что в майне??
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#8 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 декабря 2005 - 22:52

ну так подставь вместо a matrix, или как она у тебя называется.

Добавлено в [mergetime]1133729541[/mergetime]
какaя разница как она генерируется, алгоритмa поиска min и max ето не касается
  • 0
int main(void)

#9 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 04 декабря 2005 - 23:09

ну так подставь вместо a matrix, или как она у тебя называется.

Добавлено в [mergetime]1133729541[/mergetime]
какaя разница как она генерируется, алгоритмa поиска min и max ето не касается

Просмотреть сообщение

ну да) .. спасибо .

Добавлено в [mergetime]1133730508[/mergetime]
странно... но мой вариант максимума показывает тот же ответ что и твой)

Добавлено в [mergetime]1133730597[/mergetime]
int min = a[0][N-1];
for (k = N-1; k > N-1 - i; k--)
объясни тупому что эти строчки значат ... точнее для чего) если не лень
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#10 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 декабря 2005 - 23:15

int min = a[0][N-1];
for (k = N-1; k > N-1 - i; k--)
первая строчка просто инициализирует мин, кстати не совсем правильно, лучше было бы min = INT_MAX, я стормозил :) вторая начинает цикл с конца и до елемента диагонали
  • 0
int main(void)

#11 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 04 декабря 2005 - 23:46

ещё вопросик ... как сделать чтобы эти 2 числа которые прога выдаст в матрице поменялись местами ... столбики я кое как асилил ... а числа чёт не догнать мне)
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#12 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 05 декабря 2005 - 00:52

void diag(){
     int i, j;
     int b;
     b = SIZE-1;
     int max = 0;
     int min = matrix[0][b];
     int minx, miny;
     int maxx, maxy;
     int temp;

for (i = 0; i < SIZE; i++)
{
 for (j = 0; j < b - i; j++)
 {
   if (min > matrix[i][j]) min = matrix[i][j]; minx = i; miny = j; 
 }
}
printf("\nKorvadiagonaali kohal min  element on %d \n", min);       
    getch();


for (i = 0; i < SIZE; i++)
{   
 for (j = b; j > b - i; j--)
 {
   if (max < matrix[i][j]) max = matrix[i][j]; maxx = i; maxy = j;
 }
}
      printf("\nKorvadiagonaali alustest suurim element on %d \n", max);
      getch();
      
temp = matrix[minx][miny];
matrix[minx][miny] = matrix[maxx][maxy];
matrix[maxx][maxy] = temp;
showmatrix();
getch();

}

Вот нафигачил ... но чёт не хочет это работать)
  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.

#13 PLUR

PLUR

    Techno, Sex and nothing more!

  • Постоялец
  • 1 682 сообщений
  • Откуда:[kopli.tln.ee]

Отправлено 05 декабря 2005 - 01:29

хакеры млин %)
  • 0
[ ++ :: D-Lab project //.com// :: ++ ]

#14 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 05 декабря 2005 - 07:29

там, где запоминаешь мин и мах координаты поставь фигурные скобки:
...
   if (min > matrix[i][j]) 
   {
     min = matrix[i][j];
     minx = i; 
     miny = j; 
  }

...
   if (max < matrix[i][j])
   { 
     max = matrix[i][j]; 
     maxx = i; 
     maxy = j; 
   }

  • 0
int main(void)

#15 Antiseptic

Antiseptic

    психо-зверёк

  • Постоялец
  • 1 529 сообщений
  • Откуда:Cтарый район.

Отправлено 05 декабря 2005 - 10:01

там, где запоминаешь мин и мах координаты поставь фигурные скобки:

...
   if (min > matrix[i][j]) 
   {
     min = matrix[i][j];
     minx = i; 
     miny = j; 
  }

...
   if (max < matrix[i][j])
   { 
     max = matrix[i][j]; 
     maxx = i; 
     maxy = j; 
   }

Просмотреть сообщение

да уже исправил) ток это не совсем то чё надо было .. это искало и меняло лишь первы попавшийси мин с мах ... мне надо было поменять все)) ну ничё.. проблема решена)) ещё раз спасибо!


  • 0
Дыши, ровно. Представь корабли, море, спокойные волны.. горизонт полосой, взгляд на закат, если ты хочешь, всё будет именно так.