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 )
|
|
|
Записан
|
|
|
|
|