Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

05.06.2008, 13:42
|
|
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..
|
|
|

05.06.2008, 16:24
|
|
Новичок
Регистрация: 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);
}
Огромнейшее спасибо!!!!
|
|
|

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

05.06.2008, 17:34
|
|
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..
|
|
|

05.06.2008, 21:36
|
|
Новичок
Регистрация: 26.04.2008
Сообщений: 12
Провел на форуме: 7573
Репутация:
2
|
|
помогите пожалуйста
(паскаль)
1) сумма с точностью
Даны действительные числа x и ε (x≠0, ε > 0). Вычислить с точностью ε и указать количество учтенных слагаемых
2) рекурсия
Даны действительные числа x и ε (x≠0, ε > 0). Вычислить с точностью ε и указать количество учтенных слагаемых
Вычисление выражения под знаком суммы выполнить через рекурсию.
|
|
|

05.06.2008, 22:56
|
|
Участник форума
Регистрация: 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.
|
|
|

06.06.2008, 15:05
|
|
Новичок
Регистрация: 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);
}
КОД НЕ ПРОВЕРЯЛ!!! БИЛ ПРЯМО В ОКНО СООБЩЕНИЙ!
ну мне простительно у меня репутация маленькая 
да и решение таких задач тут дешево стоит!
Спасибо большущее!!!...но все же...пожалуйста...можно и эту программу тоже поподробнее..нам давали только теорию практически...примеров совсем мало...на классы дали только пример класса комплексного числа...я сам понимаю, что в принципе там классы ни к чему...но надо чтобы прога была обязательно с ними...
я с классами совсем пока не дружу...а задачу надо в понедельник сдать...
Заранее спасибо!
|
|
|

06.06.2008, 15:57
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
извини .... но тут ПОМОГАЮТ а не занимаются ВМЕСТО!
.... ЭТУ МАЛОСТЬ ЗАСУНУТЬ КОД В КЛАССЫ ТЫ ДОЛЖЕН СДЕЛАТЬ САМ!!!!!
.... ведь весь смысл этой ветки не поддерживать ХАЛЯВУ, а давать возможность посмотреть алгоритмы обсудить их.... помочь основной идеей, чтоб человек ВЫРОС в своих и чужых глазах.
ТВОИ ЗАДАЧКИ БЫЛИ ИНТЕРЕСНЫМИ ПОЭТОМУ Я И ПОМОГ ТЕБЕ.... а была бы лажа прошел мимо!
Последний раз редактировалось Delimiter; 06.06.2008 в 16:02..
|
|
|

06.06.2008, 16:03
|
|
Новичок
Регистрация: 04.06.2008
Сообщений: 6
Провел на форуме: 3183
Репутация:
1
|
|
Спасибо большое и на этом!!!!
|
|
|

06.06.2008, 17:23
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме: 422909
Репутация:
200
|
|
Народ помогите решить проблему ! Вообщем приведенная ниже программа должна сортировать массив рандомных чисел ПИРАМИДАЛЬНЫМ методом.... Вообщем она и сортирует вот только чаще всего выбивает 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..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|