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

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

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

ua
Offline 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 ,"&#170;===");
outitem(1,(i+1)*2-1, "&#170;");
outitem(1,(i+1)*2, "&#170;");
outitem(gor*4+1,(i+1)*2-1, "&#170;");
outitem(gor*4+1,(i+1)*2, "&#170;");
outitem(i*4+1,gor*2, "&#170;");
outitem(2,i*2+1, "===");
}
void vivod(short int x, short int y) {
gotoxy(x,y);

textcolor (15);
}

int main() {
clrscr();

outitem(1,2, "&#170;");
outitem(gor*4+1,2, "&#170;");
outitem(1,1, "a===");
outitem(gor*4+1,1, "&#188;");
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, "&#170;");
}
//////////////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
Помогающий

ua
Offline Offline

« Ответ #5 : 30-11-2005 22:47 » new

Как я понял с начальным выведением проблем не возникает, а возникают проблемы с последующим выводом.Сейчас попробуем помочь, хотя гарантий не дам, ибо все сейчас будет делаться на пальцах
Но ведь главное - идея
Код:
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 » 

все !всем!спасиб
уже все работает!!=))
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines