| 
			| 
					
						| sona 
								Гость
 | 
								|  | «  : 16-11-2005 12:40 »  |  | 
 
 программа сортировки двумерного массива N *K по возрастанию в борландС include <stdio.h>#include <stdlib.h>
 #include <conio.h>
 
 int main() {
 int **mas, *tmp, i, j, n, k, min, len, temp;
 
 clrscr();
 printf("VVEDITE n i K: ");
 scanf("%d %d", &n, &k);
 mas = (int**)malloc(sizeof(int*)*n);
 tmp = (int*)malloc(sizeof(int)*n*k);
 
 for (i = 0; i < n; i++) {
 printf("Vvedite %d-yu stro4ku tablici:\n", i+1);
 for (j = 0; j < k; j++) {
 printf("  %d: ", j+1);
 scanf("%d", &mas[i][j]);
 }
 }
 printf("Do sortirovki:\n");
 for (i = 0; i < n; i++) {
 for (j = 0; j < k; j++) {
 printf("%4d ", mas[i][j]);
 }
 printf("\n");
 }
 printf("\n");
 
 
 len = n*k;
 for (i = 0; i < len - 1; i++) {
 min = i;
 for (j = i  + 1; j < len; j++) {
 if (tmp[j] < tmp[min]) {
 min = j;
 }
 }
 temp = tmp[i];
 tmp[i] = tmp[min];
 tmp[min] = temp;
 }
 
 printf("Posle sortirovki:\n");
 for (i = 0; i < n; i++) {
 for (j = 0; j < k; j++) {
 printf("%4d ", mas[i][j]);
 }
 printf("\n");
 }
 
 free(tmp);
 free(mas);
 
 return 0;
 }
что то не работает что то забыла написать наверно не подскажие что и где |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #1 : 16-11-2005 12:52 »  |  | 
 
 Опечаталась ты немного, # поставь и будет компилится. На правильность не проверял. |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| sona 
								Гость
 | 
								|  | « Ответ #2 : 16-11-2005 13:11 »  |  | 
 
 хмой да опечаталась
 еще где то ошибка
 
 выводит массив но не сортирует
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sands 
								Помогающий    Offline | 
								|  | « Ответ #3 : 16-11-2005 13:13 »  |  | 
 
 Во-первых: По-моему после Выделения памяти под массив mas mas = (int**)malloc(sizeof(int*)*n); стоит запустить цикл выделения памяти под собственно элементы. Потому, что пока выделена память под одномерный массив указателей на int. Во-вторых: Когда инитится масив tmp? Видна инициализация массива mas, а когда данные попадают в tmp бог его знает. В-третьих: Почему сортируется массив tmp, а на вывод подается mas? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #4 : 16-11-2005 13:18 »  |  | 
 
 1. В самом начале проги тут  mas = (int**)malloc(sizeof(int*)*n);
В массиве mas ты выделила только одну размерность. Нужно еше иницилизировать и вторую размерность. for (i=0; i<n; i++) mas[i] = (int*)malloc(sizeof(int*)*k);
Соответственно при освобождении for (i=0; i<n; i++) free(mas[i]);free(mas);
 
2. Ты заполняеш массив mas. Но сортировку производиш массива tmp. Судя по логике твоей программы, это разные массивы. |  
						| 
								|  |  
								| « Последнее редактирование: 16-11-2005 13:20 от Finch » |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| Sands 
								Помогающий    Offline | 
								|  | « Ответ #5 : 16-11-2005 14:02 »  |  | 
 
 Вот только выделять надо не for (i=0; i<n; i++) mas[i] = (int*)malloc(sizeof(int*)*k);
а скорее всего for (i=0; i<n; i++) mas[i] = (int*)malloc(sizeof(int)*k);
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sona 
								Гость
 | 
								|  | « Ответ #6 :  16-11-2005 14:11 »   |  | 
 
 include <stdio.h>#include <stdlib.h>
 #include <conio.h>
 
 int main() {
 int **mas, *tmp, i, j, n, k, min, len, temp;
 
 clrscr();
 printf("VVEDITE n i K: ");
 scanf("%d %d", &n, &k);
 mas = (int**)malloc(sizeof(int*)*n);
 tmp = (int*)malloc(sizeof(int)*n*k);
 
 for (i = 0; i < n; i++) {
 mas[i] = tmp + i*k;                                //!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 printf("Vvedite %d-yu stro4ku tablici:\n", i+1);
 for (j = 0; j < k; j++) {
 printf("  %d: ", j+1);
 scanf("%d", &mas[i][j]);
 }
 }
 printf("Do sortirovki:\n");
 for (i = 0; i < n; i++) {
 for (j = 0; j < k; j++) {
 printf("%4d ", mas[i][j]);
 }
 printf("\n");
 }
 printf("\n");
 
 
 len = n*k;
 for (i = 0; i < len - 1; i++) {
 min = i;
 for (j = i  + 1; j < len; j++) {
 if (tmp[j] < tmp[min]) {
 min = j;
 }
 }
 temp = tmp[i];
 tmp[i] = tmp[min];
 tmp[min] = temp;
 }
 
 printf("Posle sortirovki:\n");
 for (i = 0; i < n; i++) {
 for (j = 0; j < k; j++) {
 printf("%4d ", mas[i][j]);
 }
 printf("\n");
 }
 
 free(tmp);
 free(mas);
 
 return 0;
 }
вот так заработало |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sona 
								Гость
 | 
								|  | « Ответ #7 : 20-11-2005 07:23 »  |  | 
 
 ребятамне нужна такая вещь короче
 если кто знает хорошо
 помогите плизз
 
 ввожу размер матрицы ,
 и он должен нарисовать ее в виде таблицы
 например ввожу 2 на 2 массив
 он рисует что то такое
 
 ________
 |___|___|
 |___|___|
 
 и заполняем массив
 типа
 нажимую введи 1 элемент=3
 и происходит типа
 
 ________
 |_3_|___|
 |___|___|
 
 и так далее заполнение идет
 
 заполнили.....
 жмем ентер
 и делается пошаговый режим
 типа
 
 в табица нарисована
 
 допустим в ней такие элементы
 5 4
 3 2
 
 сначала он подсвечивает цветом элемент
 2
 
 
 и выводит
 2
 
 затем подсвечитае
 
 3
 
 и выводит
 2 3
 (каждый шаг он подсвечивает минимльный,элемент и ставит его на 1 место,затем,ищем среди оставшихся минимум и ставим на 2 место,итд)
 
 итд
 и в итоге
 вывожит
 2 3
 4 5
 
 
 я знаю что задание мегасложное,но мало ли кто знает как это делается,или когда то делал такое
 то  спасите
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sona 
								Гость
 | 
								|  | « Ответ #8 : 21-11-2005 09:26 »  |  | 
 
 #include <stdio.h>#include <stdlib.h>
 #include <conio.h>
 #include <time.h>
 #define gor 10
 #define ver 10
 int i,j,min,x,y,mas[gor][ver];
 void main(void)
 {
 clrscr();
 gotoxy(1,2);
 printf("║");
 gotoxy(gor*4+1,2);
 printf("║");
 gotoxy(1,1);
 printf("╔");
 gotoxy(gor*4+1,1);
 printf("╗");
 gotoxy(1,gor*2+1);
 printf("╚");
 gotoxy(gor*4+1,gor*2+1);
 printf("╝");
 
 for(i=1;i<gor;i++)
 {
 gotoxy((i)*4+1,1);
 printf("╦");
 gotoxy((i)*4+1,gor*2+1);
 printf("╩");
 gotoxy(1,(i+1)*2-1);
 printf("╠");
 gotoxy(1,(i+1)*2);
 printf("║");
 gotoxy(gor*4+1,(i+1)*2-1);
 printf("╣");
 gotoxy(gor*4+1,(i+1)*2);
 printf("║");
 gotoxy(i*4+1,gor*2);
 printf("║");
 gotoxy(2,i*2+1);
 printf("");
 }
 for(i=1;i<gor;i++)
 for(j=1;j<gor;j++)
 {
 gotoxy((i)*4+1,j*2+1);
 printf("╬");
 gotoxy((i)*4+1,j*2);
 printf("║");
 }
 getchar() ;
 }
 
VOT TABLICA ESt' !! ne podkagite kak ostalnoe sdlelat chtob zapolnyalo po kvadratam itd?? |  
						| 
								|  |  
								| « Последнее редактирование: 20-12-2007 20:18 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| sona 
								Гость
 | 
								|  | « Ответ #9 : 21-11-2005 09:32 »  |  | 
 
 сорриимела ввиду
 
 таблицу нарисовала,
 токо как ее теперь заполнять,ну чтоб там в первый квадрат первый элемент и т д,поможьте люди добрые,и вот это если кто может(табица нарисована
 
 допустим в ней такие элементы
 5 4
 3 2
 
 сначала он подсвечивает цветом элемент
 2
 
 
 и выводит
 2
 
 затем подсвечитае
 
 3
 
 и выводит
 2 3
 (каждый шаг он подсвечивает минимльный,элемент и ставит его на 1 место,затем,ищем среди оставшихся минимум и ставим на 2 место,итд)
 
 итд
 и в итоге
 выводит
 2 3
 4 5
 )
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |