| 
			| 
					
						| 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 »  |  | 
 
 все !всем!спасибуже все работает!!=))
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |