Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Массивчик  (Прочитано 12666 раз)
0 Пользователей и 1 Гость смотрят эту тему.
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
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-11-2005 12:52 » 

Код:
include <stdio.h>
Опечаталась ты немного, # поставь и будет компилится. На правильность не проверял.
Записан

ещё один вопрос ...
sona
Гость
« Ответ #2 : 16-11-2005 13:11 » 

хм
ой да опечаталась
еще где то ошибка

выводит массив но не сортирует
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #3 : 16-11-2005 13:13 » 

Во-первых:
По-моему после Выделения памяти под массив mas
Цитата
mas = (int**)malloc(sizeof(int*)*n);
стоит запустить цикл выделения памяти под собственно элементы. Потому, что пока выделена память под одномерный массив указателей на int.
Во-вторых:
Когда инитится масив tmp?
Видна инициализация массива mas, а когда данные попадают в tmp бог его знает.
В-третьих:
Почему сортируется массив tmp, а на вывод подается mas?
Записан
Finch
Спокойный
Администратор

il
Offline 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
Помогающий

ua
Offline 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
)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines