ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #591  
Старый 05.06.2008, 13:42
Аватар для Delimiter
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

Код дан в рамках Си (Керниган и Ритчи)
Код:
#include "stdio.h"

int a[8]; // массив в котором подбираем цифры (хотя они в виде чисел)
void step(int cur)
{
   int i,j,fl;
  if(cur<8) // проверяю не пора ли заканчивать
  {
   for(i=0;i<10;i++) // подбираю цифру
   {
      for(j=0,fl=0;j<cur && fl==0;j++) // проверяю не было ли такх цифр
       if(a[j]==i)
         fl=1;
       if(fl==0)
       {
          a[cur]=i;
          step(cur+1); // ухожу в глубь
       }
   }
  }
  else
  {  // тут самое важное! Проверяю соответствуют ли цифры основному условию
    if((1000*a[0]+100*a[1]+10*a[2]+a[3]+1000*a[4]+100*a[5]+10*a[6]+a[1])==(10000*a[4]+1000*a[5]+100*a[2]+10*a[1]+a[7]))
    {
       printf("\r\nРезультат:\r\n");
       printf("s->%d\r\n",a[0]);
       printf("e->%d\r\n", a[1]);
       printf("n->%d\r\n", a[2]);
       printf("d->%d\r\n", a[3]);
       printf("m->%d\r\n", a[4]);
       printf("o->%d\r\n", a[5]);
       printf("r->%d\r\n", a[6]);
       printf("y->%d\r\n", a[7]);
    }
  }
}
void main()
{
  step(0);
}

Последний раз редактировалось Delimiter; 05.06.2008 в 13:50..
 
Ответить с цитированием

  #592  
Старый 05.06.2008, 16:24
Аватар для plat
plat
Новичок
Регистрация: 04.06.2008
Сообщений: 6
Провел на форуме:
3183

Репутация: 1
По умолчанию

Цитата:
Сообщение от Delimiter  
Код дан в рамках Си (Керниган и Ритчи)
Код:
#include "stdio.h"

int a[8]; // массив в котором подбираем цифры (хотя они в виде чисел)
void step(int cur)
{
   int i,j,fl;
  if(cur<8) // проверяю не пора ли заканчивать
  {
   for(i=0;i<10;i++) // подбираю цифру
   {
      for(j=0,fl=0;j<cur && fl==0;j++) // проверяю не было ли такх цифр
       if(a[j]==i)
         fl=1;
       if(fl==0)
       {
          a[cur]=i;
          step(cur+1); // ухожу в глубь
       }
   }
  }
  else
  {  // тут самое важное! Проверяю соответствуют ли цифры основному условию
    if((1000*a[0]+100*a[1]+10*a[2]+a[3]+1000*a[4]+100*a[5]+10*a[6]+a[1])==(10000*a[4]+1000*a[5]+100*a[2]+10*a[1]+a[7]))
    {
       printf("\r\nРезультат:\r\n");
       printf("s->%d\r\n",a[0]);
       printf("e->%d\r\n", a[1]);
       printf("n->%d\r\n", a[2]);
       printf("d->%d\r\n", a[3]);
       printf("m->%d\r\n", a[4]);
       printf("o->%d\r\n", a[5]);
       printf("r->%d\r\n", a[6]);
       printf("y->%d\r\n", a[7]);
    }
  }
}
void main()
{
  step(0);
}
Огромнейшее спасибо!!!!
 
Ответить с цитированием

  #593  
Старый 05.06.2008, 17:29
Аватар для plat
plat
Новичок
Регистрация: 04.06.2008
Сообщений: 6
Провел на форуме:
3183

Репутация: 1
По умолчанию

Помогите пожалуйста написать еще одну программу на С++...для меня она совсем неподъемная...
надо решить следующую задачу:
есть некая прямоугольная площадь...она разделена на 6 квадратов..5 из них заняты мебелью,а шестая свободна. надо переставить мебель так, чтобы шкаф и кресло поменялись местами,при этом никакие 2 предмета не могут стоять на 1 квадрате...
расположение мебели следующее:
_____________
стол|стул|шкаф|
_____________
стул| |кресло|

надо чтобы программа сама находила решение...т.е. искала как должна двигаться мебель...и чтобы движения выводились в какой-нибудь файл...и эту программу необходимо сделать обязательно используя классы..
 
Ответить с цитированием

  #594  
Старый 05.06.2008, 17:34
Аватар для Delimiter
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

хммм .... классы тут как-то боком!
их придется впихивать совсем без их преимуществ


давай набросаю суть а ты ее засунешь хоть в классы , хоть в мусорку!

будем обозначать символами
a-кресло(arm chair)
c-стул(chair)
t-стол(table)
s-шкаф(shelves)

Код:
#defane MAX_STEPS 50
char a[3][3]; //третий ряд забит нулями
char steps[MAX_STEPS][7];
char rez[3][3];

int abs(int numb)   // просто извращаюсь...
{
   if(numb<0)
     return numb*(-1);
   else
    return numb;
}
void step(int step,int pusto_x,int pusto_y)
{                 // step -текущая глубина рекурси
                  // pusto_x - координата пустого места
                 // pusto_y - координата пустого места
   int i,j,k;
   if(steps<MAX_STEPS-1)
   {
      for(i=0;i<2;i++)
         for(j=0;j<3;j++)
           if(i!=pusto_y || j!=pusto_x) // проверяю чтоб счетчики
                                                       // не совпадали с пустой клеткой
             if(i==pusto_y || j==pusto_x)     // проверяю на условие движения
              if(abs(pusto_x-j)==1)               // через клетку не прыгать              
              {
                 // могем менять местами
                 a[pusto_y][pusto_x]=a[i][j];
                 a[i][j]=' ';                              // передвигаю чегото
                 for(k=0,fl=0;k<MAX_STEPS && k<step && fl==0;k++)
                 if(strcmp(a,rez)==0)            // проверяю не встречалось ли
                    fl=1;                                 // данное расположение
                 if(strcmp(a,rez)==0)           // проверяю не получили ли мы то что 
                 {                                        // нужно достичь
                     // вываливай весь steps
                     // хоть в файл хоть на печать 
                     fl=1;
                 }
                 if(fl==0)
                 {
                   strcpy((char *)&steps[step][0],a); // записываю ход
                   step(step+1,j,i);                       // уход в глубь
                   // стирать ход не нужно поскольку ПЕРЕЗАПИСЬ
                 }
                 a[i][j]=a[pusto_y][pusto_x]; // востанавливаю предыдущее
                 a[pusto_y][pusto_x]=' ';       // состояние
              } 
  }
   else
     return ; // возврат если перебор по глубине
}

void main()
{
  int i,j;
  // подготавливаем массивы
  for(i=0;i<MAX_STEPS;i++)
    strcpy((char *)&steps[i][0],"");
  a[0][0]='t'; // исходный массив
  a[0][1]='c';
  a[0][2]='s';
  a[1][0]='c';
  a[1][1]=' ';
  a[1][2]='a';
  a[2][0]=0;  // забиваем нулями для того чтобы
  a[2][1]=0;  // сформировалась идентифицирующая строка
  a[2][2]=0;
   rez[0][0]='t'; // массив который нужно получить
   rez[0][1]='c';
   rez[0][2]='a';
   rez[1][0]='c';
   rez[1][1]=' ';
   rez[1][2]='s';
   rez[2][0]=0;  // забиваем нулями с целью как и
   rez[2][1]=0;  // для массива a
   rez[2][2]=0;
  steps(0,1,1);
}
КОД НЕ ПРОВЕРЯЛ!!! БИЛ ПРЯМО В ОКНО СООБЩЕНИЙ!

ну мне простительно у меня репутация маленькая
да и решение таких задач тут дешево стоит!

Последний раз редактировалось Delimiter; 06.06.2008 в 16:31..
 
Ответить с цитированием

  #595  
Старый 05.06.2008, 21:36
Аватар для Catsy
Catsy
Новичок
Регистрация: 26.04.2008
Сообщений: 12
Провел на форуме:
7573

Репутация: 2
По умолчанию

помогите пожалуйста
(паскаль)

1) сумма с точностью
Даны действительные числа x и ε (x≠0, ε > 0). Вычислить с точностью ε и указать количество учтенных слагаемых


2) рекурсия
Даны действительные числа x и ε (x≠0, ε > 0). Вычислить с точностью ε и указать количество учтенных слагаемых

Вычисление выражения под знаком суммы выполнить через рекурсию.
 
Ответить с цитированием

  #596  
Старый 05.06.2008, 22:56
Аватар для 043nKRuT0y
043nKRuT0y
Участник форума
Регистрация: 31.10.2007
Сообщений: 213
Провел на форуме:
394522

Репутация: 14
По умолчанию

Народ помогите решить проблему ! Вообщем приведенная ниже программа должна сортировать массив рандомных чисел ПИРАМИДАЛЬНЫМ методом.... Вообщем она и сортирует вот только чаще всего выбивает STACK OVERFLOV.... я там уже и функцию проверки на сортировку кинул штобы не вращалось слишком много и всеравно облом .... Вообщем код ниже кто сможет подправить укажите ошибку исправленным кодом !!!

Код:
{-$S}
Program Piramida;

Uses CRT;

Const
     max = 100;

Type myArray = array[0..max] of Integer;

Var dimension, i : Integer;
    arr, sortArray : myArray;
{***********************************\
                                      \**************************************}
Procedure Sift( Var arr : myArray; L, R : Integer );
Var i, j : Integer;
    item : Integer;
Begin
     i := L;
     j := 2*L;
     item := arr[L];
     If ( j < R ) And ( arr[j] < arr[j + 1] ) Then Begin
                                                        j := j + 1;
                                                   End;
     While ( j <= R ) And ( item < arr[j] ) do
      Begin
           arr[i] := arr[j];
           i := j;
           j := 2*j;
           If ( j < R ) And ( arr[j] < arr[j + 1] ) Then Begin
                                                              j := j + 1;
                                                         End;
      End;
     arr[i] := item;
End;
{***********************************\
                                      \**************************************}
Function Anti_Overflow( mas : myArray; rozmir : Integer) : Boolean;
Var
   i , j: Integer;
   max : Integer;
Begin
     For j := 0 To rozmir Do
     Begin
          max := mas[j];
          For i := 1 To rozmir+1 Do
          Begin
               If max > mas[i] Then Anti_Overflow := False
          End;
     End;
End;
{***********************************\
                                      \**************************************}
Procedure HeapSort( arr : myArray; size : Integer );
Var i, L, R : Integer;
    item : Integer;
Begin
     L := ( size div 2 );
     R := size - 1 ;
     While L > 0 do
     Begin
           L := L - 1;
           Sift( arr, L, R );
     End;
         While R > 0 do
         Begin
              item := arr[0];
              arr[0] := arr[R];
              arr[R] := item;
              R := R - 1;
              Sift( arr, L, R );
         End;
     If Anti_Overflow(arr,size) = False Then HeapSort (arr,size)
     Else Begin
               Write('Sorting array: ');
               For i := 0 To size-1 do
               Begin
                    Write( Arr[i] );
                    Write(' ');
               End;
          End;
End;
{***********************************\
                                      \**************************************}
Begin
     ClrScr;
     Write('Rozmirnist Masivu : ');
          ReadLn( dimension );
     Write('Enter ');Write( dimension );Write(' elements: ');
     Randomize;
     For i := 0 To dimension Do Begin
                                     arr[i] := Random(50);
                                     WriteLn(arr[i]);
                                End;
                                HeapSort( arr , dimension );
     WriteLn;
     WriteLn('Press "Enter" to continue...');
     ReadKey;
End.
 
Ответить с цитированием

  #597  
Старый 06.06.2008, 15:05
Аватар для plat
plat
Новичок
Регистрация: 04.06.2008
Сообщений: 6
Провел на форуме:
3183

Репутация: 1
По умолчанию

Цитата:
Сообщение от Delimiter  
хммм .... классы тут как-то боком!
их придется впихивать совсем без их преимуществ


давай набросаю суть а ты ее засунешь хоть в классы , хоть в мусорку!

будем обозначать символами
a-кресло(arm chair)
c-стул(chair)
t-стол(table)
s-шкаф(shelves)

Код:
#defane MAX_STEPS 50
char a[3][3]; //третий ряд забит нулями
char steps[MAX_STEPS][7];
char rez[3][3];

int abs(int numb)
{
   if(numb<0)
     return numb*(-1);
   else
    return numb;
}
void step(int step,int pusto_x,int pusto_y)
{
   int i,j,k;
   if(steps<MAX_STEPS-1)
   {
      for(i=0;i<2;i++)
         for(j=0;j<3;j++)
           if(i!=pusto_y || j!=pusto_x)
             if(i==pusto_y || j==pusto_x)
              if(abs(pusto_x-j)==1)
              {
                 // могем менять местами
                 a[pusto_y][pusto_x]=a[i][j];
                 a[i][j]=' ';
                 for(k=0,fl=0;k<MAX_STEPS && strlen((char *)&steps[k][0])>6 && fl==0;k++)
                 if(strcmp(a,rez)==0)
                    fl=1;
                 if(strcmp(a,rez)==0)
                 {
                     // вываливай весь steps
                     // хоть в файл хоть на печать 
                     fl=1;
                 }
                 if(fl==0)
                 {
                   strcpy((char *)&steps[k][0],a);
                   step(step+1,j,i);
                   strcpy((char *)&steps[k][0],"");
                 }
                 a[i][j]=a[pusto_y][pusto_x];
                 a[pusto_y][pusto_x]=' ';
              } 
  }
   else
     return ;
}

void main()
{
  int i,j;
  // подготавливаем массивы
  for(i=0;i<MAX_STEPS;i++)
    strcpy((char *)&steps[i][0],"");
  a[0][0]='t'; // исходный массив
  a[0][1]='c';
  a[0][2]='s';
  a[1][0]='c';
  a[1][1]=' ';
  a[1][2]='a';
  a[2][0]=0;  // забиваем нулями для того чтобы
  a[2][1]=0;  // сформировалась идентифицирующая строка
  a[2][2]=0;
   rez[0][0]='t'; // массив который нужно получить
   rez[0][1]='c';
   rez[0][2]='a';
   rez[1][0]='c';
   rez[1][1]=' ';
   rez[1][2]='s';
   rez[2][0]=0;  // забиваем нулями с целью как и
   rez[2][1]=0;  // для массива a
   rez[2][2]=0;
  steps(0,1,1);
}
КОД НЕ ПРОВЕРЯЛ!!! БИЛ ПРЯМО В ОКНО СООБЩЕНИЙ!

ну мне простительно у меня репутация маленькая
да и решение таких задач тут дешево стоит!
Спасибо большущее!!!...но все же...пожалуйста...можно и эту программу тоже поподробнее..нам давали только теорию практически...примеров совсем мало...на классы дали только пример класса комплексного числа...я сам понимаю, что в принципе там классы ни к чему...но надо чтобы прога была обязательно с ними...
я с классами совсем пока не дружу...а задачу надо в понедельник сдать...
Заранее спасибо!
 
Ответить с цитированием

  #598  
Старый 06.06.2008, 15:57
Аватар для Delimiter
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

извини .... но тут ПОМОГАЮТ а не занимаются ВМЕСТО!

.... ЭТУ МАЛОСТЬ ЗАСУНУТЬ КОД В КЛАССЫ ТЫ ДОЛЖЕН СДЕЛАТЬ САМ!!!!!

.... ведь весь смысл этой ветки не поддерживать ХАЛЯВУ, а давать возможность посмотреть алгоритмы обсудить их.... помочь основной идеей, чтоб человек ВЫРОС в своих и чужых глазах.

ТВОИ ЗАДАЧКИ БЫЛИ ИНТЕРЕСНЫМИ ПОЭТОМУ Я И ПОМОГ ТЕБЕ.... а была бы лажа прошел мимо!

Последний раз редактировалось Delimiter; 06.06.2008 в 16:02..
 
Ответить с цитированием

  #599  
Старый 06.06.2008, 16:03
Аватар для plat
plat
Новичок
Регистрация: 04.06.2008
Сообщений: 6
Провел на форуме:
3183

Репутация: 1
По умолчанию

Спасибо большое и на этом!!!!
 
Ответить с цитированием

  #600  
Старый 06.06.2008, 17:23
Аватар для A2GIL
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

Цитата:
Народ помогите решить проблему ! Вообщем приведенная ниже программа должна сортировать массив рандомных чисел ПИРАМИДАЛЬНЫМ методом.... Вообщем она и сортирует вот только чаще всего выбивает STACK OVERFLOV.... я там уже и функцию проверки на сортировку кинул штобы не вращалось слишком много и всеравно облом .... Вообщем код ниже кто сможет подправить укажите ошибку исправленным кодом !!!
У тебя ошибка на ошибке. Вот смотри, зачем делать HeapSort процедурой? Ведь ей нужно передавать массив! Поэтому она должна быть функцией. И не зачем было делать Anti_Overflow. То есть:

//переделываем на функцию
Код:
function HeapSort( arr : myArray; size : Integer ):myArray;
Var i, L, R : Integer;
    item : Integer;
Begin
     L := ( size div 2 );
     R := size - 1 ;
     While L > 0 do
     Begin
           L := L - 1;
           Sift( arr, L, R );
     End;
         While R > 0 do
         Begin
              item := arr[0];
              arr[0] := arr[R];
              arr[R] := item;
              R := R - 1;
              Sift( arr, L, R );
         End;
    heapsort:=arr;
End;
// и рендомное заполнение массива переделай:
Код:
 ClrScr;
     Write('Vvedite rozmirnist'' massiva : ');
     ReadLn( dimension );
     writeln;
     writeln('************************************************');
     Write('Ishodnii massiv iz ');Write( dimension );Write(' elementov: ');
     Randomize;
     For i := 0 To dimension-1 Do
      Begin
       arr[i] := Random(50);
       Write(arr[i]);write(' ');
      End;
      writeln;
     writeln('************************************************');
     SortArray:=HeapSort( arr , dimension );
     write('Otsortirovanii massiv : ');
       for i := 0 to dimension-1 do begin
         write( sortArray[i] ); write(' '); end;
     writeln;
     writeln('************************************************');
     writeln;
     WriteLn('Press "Enter" to continue...');
     Readln; 
     Readln;
P.s. МаССив пишется с двумя с ... Надо увОжать русский язык

Последний раз редактировалось A2GIL; 06.06.2008 в 17:25..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сюда выкладываем все проги для фрикринга мобильников, которых знаем! nigger Сотовый фрикинг 5 11.04.2009 11:15
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ