sona
Гость
|
|
« : 22-11-2005 10:45 » |
|
так вы не хотите мне помочь пока вас просила,сама че то накарякала #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define gor 4 #define ver 4 int i,j,min,x,y,mas[gor][ver]; int k,n=0; 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("║"); }
for(i=0;i<gor;i++) { for(j=0;j<ver;j++) { gotoxy(2+4*k,2+2*n); scanf("%3d",&mas[i][j]); k++; } k=0; n++; } }
тут рисую таблицу и пишу в нее элементы а задание все тоже ПОМОГИТЕ пожалста(в этой таблице сделать сортировку по возрастанию) то есть пошагово() допустим было 4 3 1 2 подсвечиваю цветом минимальный элемент,жму ентер, и вывожу его на 1 месте,(эл=1) затем 2-о1 по минимальности,подсчечиваю и вывожу его вторым(эл=2) итд в итоге 1 2 3 4 отсортировный масив можно выводить просто а не в таблице
|
|
|
Записан
|
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #1 : 23-11-2005 14:39 » |
|
Мучают пару вопросов: 1. А что будет если 2 одинаковых эдемента? Есть ли какие-либо правила на порядок подсветки? 2. Если ты уже выводиш таблицу и значения в ней, то что тебе мешает искать минимум по таблице и подсвечивать элемент в соответствующем месте?
Как вариант решения можеш завести массив двойных индексов типа (0;0),(0;1),...,(0;n),(1;0),(1,1),...,(1,n),...,(n;0),(n;1),...,(n,n) по размерности матрицы и сортируя массив temp(конечно если юзаеш программу из предыдущего своего запроса) одновременно переставлять соответствующие элементы массива индесов. После окончания сортировки тебе только останется в пошаговом режиме подсвечивать элемент матрицы, который значится в <массив индексов после сортировки> и выводить temp внизу
|
|
|
Записан
|
|
|
|
sona
Гость
|
|
« Ответ #2 : 24-11-2005 10:28 » |
|
Мучают пару вопросов: 1. А что будет если 2 одинаковых эдемента? Есть ли какие-либо правила на порядок подсветки? 2. Если ты уже выводиш таблицу и значения в ней, то что тебе мешает искать минимум по таблице и подсвечивать элемент в соответствующем месте?
1) нет,любой порядок,они же одинаковые=) 2) да че то не получается,если зн аешь помоги плизз
|
|
|
Записан
|
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #3 : 24-11-2005 21:38 » |
|
Програмку писать не буду(пока) ибо намного приятнее самому все реализовать, да и пользы от этого больше На псевдокоде это будет выглядеть приблизительно так(опять же ориентируясь на прогу где ты завязывала двумерныймассив и одномерный).Будем считать, что все приготовления сделаны, матрица заполнена, все готово для обработки. Псевдокод: 1.заводим одномерный массив размером N^2 ( где N - размерность матрицы) пар вида (i,j).Для простоты назовем его Index; 2 for(int i=0;i<N;i++) { for(int j=0;j<N;j++) Index[i*N+j]=(i,j); } 3. Соственно сортировка(приводится пузырьковый метод, но в принципе может быть использован любой другой) for(int i+0;i<N^2-1;i++) for(int j=N^2-1;j>=i;j--) { if(temp[j]<temp[j-1]) { поменять местами элементы temp[j] и temp[j-1], а также поменять местами элеметы Index[j] и Index[j-1] } } 4. for(int i=0;i<N^2;i++) { Подсветить элемент матрицы в k-ой строчке j-ом столбце, кде (k,j) - пара записанная в Index[i] Вывести значение записанное в temp[i] } Вот фактически всё.
Теперь некоторые так сказать комментарии(в основном касаются подсветки) 1. Не помню есть ли в сях поцедурка, которая подсвечивает символы на экране.Если есть то подсветка оределенного элемента матрицы реализовывается просто:Зная позицию элемента и число знаков отведенных на его запись в матрице нужно подсветить все эти позиции 2. Можно просто заново выводить число в заданном месте экрана(благо само число и его месторасположение нам известны) только другим цветом 3. Совсем весело.Можно работать через видеопамять напрямую начальный адрес если я правильно помню 0xB800:0000 хотя это можно уточнить на форуме.Под каждую позицию на екране отводится 2 байта - первый отвечает за сивол, которйы выводится в этой позиции на екран, а второй отвечает за свойства символа(цвет, яркость, мигание).Тогда нужно просто поменять значения в нужных байтах и получиш подсветку числа на экране
|
|
« Последнее редактирование: 22-04-2006 14:11 от Алексей1153 »
|
Записан
|
|
|
|
sona
Гость
|
|
« Ответ #4 : 30-11-2005 05:31 » |
|
Sands,или кто-нибудь еще помогите плизз у меня вот есть,но это не совсем то...мне бы надо...чтоб есть допустим исходная матрица 2 4 5 1 он красным цветом выделяет допустим 1 жмем ентер он ниже выводит массив 1 затем красным выделяем, 2 ентер..и ниже.... 1 2 и тд со всеми элементами пока не будет 1 2 4 5 вот мой код,спасите #include <stdio.h> #include <conio.h>
#define gor 2 #define ver 2
typedef int bool; const true = 1, false = 0;
int mas[gor][ver],i,j,ii,jj,len,mini,minj,temp,tmp; bool is; int k,n=0; void outitem(short int x, short int y, char* text) { gotoxy(x,y);
textcolor (22); cprintf("%s", text); } void write(int i) { outitem((i)*4+1,1, "T==="); outitem((i)*4+1,gor*2+1 ,"ª==="); outitem(1,(i+1)*2-1, "ª"); outitem(1,(i+1)*2, "ª"); outitem(gor*4+1,(i+1)*2-1, "ª"); outitem(gor*4+1,(i+1)*2, "ª"); outitem(i*4+1,gor*2, "ª"); outitem(2,i*2+1, "==="); } void vivod(short int x, short int y) { gotoxy(x,y);
textcolor (15); }
int main() { clrscr();
outitem(1,2, "ª"); outitem(gor*4+1,2, "ª"); outitem(1,1, "a==="); outitem(gor*4+1,1, "¼"); outitem(1,gor*2+1, "L==="); outitem(gor*4+1,gor*2+1, "-"); for(i=1;i<gor;i++) { write(i); } for(i=1;i<gor;i++) for(j=1;j<gor;j++) { outitem((i)*4+1,j*2+ 1, "T==="); outitem((i)*4+1,j*2, "ª"); } //////////////zapolnenie tablici for(i=0;i<gor;i++) { for(j=0;j<ver;j++) { gotoxy(2+4*k,2+2*n); scanf("%3d",&mas[i][j]); k++; } k=0; n++; } //////// vivod massiva vivod(40,2); printf("Icxodnij massiv"); vivod(40,2); printf("Icxodnij massiv"); vivod(40,8); for(i=0;i<gor;i++) { vivod(40,3+k); for(j=0;j<ver;j++) { cprintf("%3d",mas[i][j]); } printf("\n"); k++; } is = true; k = 0; while(is) { is = false; for (i = 0; i < ver; i++) { for(j = 0; j < gor; j++) if ( mas[i][j] < mas[i][j-1] ) { gotoxy(40 + 3*j,3 + i); sleep(1); textcolor(10); cprintf("%3d",mas[i][j]); temp = mas[i][j]; mas[i][j] = mas[i][j-1]; mas[i][j-1] = temp; gotoxy(40 + 3*j,3 + i); textcolor(15); cprintf("%3d",mas[i][j]); if(j>0) { gotoxy(40 + 3*(j-1),3 + i); sleep(1); textcolor(12); cprintf("%3d",mas[i][j-1]); } else { gotoxy(40 + 3*j,3 + i - 1); sleep(1); textcolor(12); cprintf("%3d",mas[i][j-1]); } // gotoxy(40 + 3*(j-1),3 + i); is = true; } } } /*k = 0; for(i=0;i<gor;i++) { vivod(40,3+k); for(j=0;j<ver;j++) { cprintf("%3d",mas[i][j]); } printf("\n"); k++; } */
getch(); }
|
|
|
Записан
|
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #5 : 30-11-2005 22:47 » |
|
Как я понял с начальным выведением проблем не возникает, а возникают проблемы с последующим выводом.Сейчас попробуем помочь, хотя гарантий не дам, ибо все сейчас будет делаться на пальцах Но ведь главное - идея int IMin,JMin,ICur,JCur; int min,temp; for(k=0;k<gor*ver;k++) { ICur=k/ver; JCur=k%ver; if(JCur==0) printf("\n"); min=mas[ICur][JCur]; IMin=ICur; JMin=JCur; for(int i=0;i<gor;i++) { if(i<ICur) continue; for(int j=0;j<ver;j++) { if((i==ICur)&&(j<JCur)) continue; if(min>mas[i][j]) { IMin=i;JMin=j; min=mas[i][j]; } } } <podsvetit' element ishodnoj matrici s indeksom IMin,JMin> char ch=0; while(ch!=13) ch=getch()//zdem hazhatija Entera temp=mas[ICur][JCur]; mas[ICur][JCur]=mas[IMin][JMin]; mas[IMin][JMin]=temp; <smenit' cvet teksta na normalnij> <vivesti v poziciju ICur,JCur modificirovannoj matrici element mas[ICur][JCur]> }
Теперь маленькая анотация: Все что написано в скобках типа <> следует воспринимать как псевдокод, который по моему мнению ты и сама сможеш реализовать. Будет трудно присылай Говоруна
|
|
« Последнее редактирование: 20-12-2007 19:17 от Алексей1153++ »
|
Записан
|
|
|
|
sona
Гость
|
|
« Ответ #6 : 01-12-2005 04:43 » |
|
все !всем!спасиб уже все работает!!=))
|
|
|
Записан
|
|
|
|
|