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

12.12.2008, 16:19
|
|
Новичок
Регистрация: 07.11.2006
Сообщений: 20
Провел на форуме: 299123
Репутация:
3
|
|
Нужно вычислить интеграл методом трапеций путем создания цикла подпроцессов, которые моделируют работу виртуальных процессоров при их асинхронному параллельном выполнении в виде цикла создания подпроцессов.
Короче полная засада, как решить все ето на делфи не знаю.... Помогите кто может.
аська: 4пять879236четыре
Последний раз редактировалось xaldey; 12.12.2008 в 16:24..
|
|
|

12.12.2008, 18:53
|
|
Познающий
Регистрация: 10.11.2006
Сообщений: 57
Провел на форуме: 456672
Репутация:
20
|
|
Задача: найти все перестановки целого числа длинной n. Вот мой алгоритм.
PHP код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *out;
int data[10]; //10 элементов будет досточно
int n; //кол-во элементов для перестановок
int tmp, min;
int invert;//номер элемента для перестановки
int i, j; //счетчики
int scrambling=0; //кол-во записей
bool go=true;//true-продолжить вычисления, false - остановиться.;
char inbuf[2];
start:
printf("Enter the number(1-9): ");
gets(inbuf);
sscanf(inbuf,"%d",&n); //ввод числа с клавиатуры
if(n<1||n>9) //проверка на введенное число
{
printf("Error!!\n");
goto start;
}
out=fopen("output.txt", "w");
//n=4;
for (i = 0; i < n; i++) //заполняем массив
{
data[i] = i+1;
}
while (go)
{
go = false;
for (i =0; i < n; i++)
{
printf("%d", data[i]); //вывод на экран массива т.е. одной строчки.
fprintf(out, "%d", data[i]);
}
scrambling++;//Количество перестановок увеличилось на единицу.
if(n==1) //если n единица, то выход из цикла.
{
printf("\n");
fprintf(out, "%d", data[i]);
break;
}
/* 1. Двигаемся с предпоследнего элемента перестановки, ищем элемент data[i],
удовлетворяющий неравенству data[i] < data[i + 1] */
for (i = n - 2; i>= 0; i--) //перебираем возможные перестановки
{
if (data[i] < data[i + 1]) //если ни разу не выполяентся, то go останется false,
{
invert=i; //номер элемента, который будем переставлять
go = true;
break;
}
}
if(go==false){break;};
printf("\n");
fprintf(out, "\n");
/* 2. Меняем местами элемент data[invert] с наименьшим элементом, который:
находится праве data[invert] и является больше чем data[invert] */
for (i=invert+1; i<n; i++)
{
if(data[invert]<data[i]){min=i;}
}
tmp=data[invert];
data[invert] = data[min];
data[min] = tmp;
/* 3. Все элементы стоящие правее data[invert] сортируем по возрастанию*/
/*Сортировка пузырьковым методом*/
for (j=invert+1;j<n; j++)
{
for(i=invert+1;i<n-1;i++)
{
if(data[i]>data[i+1])
{
tmp=data[i];
data[i]=data[i+1];
data[i+1]=tmp;
}
}
}
}
printf("\n\nScrambling=%d\n",scrambling);
fclose(out);
system("PAUSE");
return 0;
}
Преподаватель попросил усовершенствовать его, а именно обезопаситься от одинаковых значений (хотя и так понятно, что их там нет), а так же подтворить, что все вариантов перестановок больше нет.
Мои идеи по этому поводу. Перестановок может быть N!, а значит что если N! будет равно scrambling, то перестановок именно нужное кол-во. Препод сказал следующее, а вдруг встретятся одинаковые перестановки, тогда scrambling не будет равно N!.
Что касается одинаковых строчек, можно каждый раз перед выводом(записью) новой строки сравнивать ее со всеми предыдущими из файла, на сколько это угробит скорость работы?
Помогите идеями с этими двумя вопросам. Реализация не обязательно, хотя не откажусь.
Если у вас имеется другие алгоритмы для данной задачи, то хотел бы увидеть их тоже. Тема должна быть близка вам (генераторы паролей, icq номеров и т.п.)
Спасибо за внимание.
Последний раз редактировалось Asp1r1n; 12.12.2008 в 19:13..
|
|
|

12.12.2008, 20:47
|
|
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме: 1417964
Репутация:
665
|
|
2Asp1r1n:
не стоит задавать исходный массив, как упорядоченную последовательность
1,2,3,4.
Тестировать лучше на рэндомных числах.
Особенно, когда идет привязка к сортировке по возрастанию
п.с. формально препод абсолютно прав.
|
|
|

12.12.2008, 21:09
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
2 Asp1r1n
все перестановки элементов массива у которых элементы могут совпадать
не является тривиальной задачей
например 11111 существуеет одна единственная перестановка а не 5! 8))
...
если необходимо найти общее количество перестановок то математически
находится
G=N!
Total=G-F
где F - это всевозможные перестановки одинаковых!
|
|
|

12.12.2008, 21:45
|
|
Новичок
Регистрация: 08.02.2008
Сообщений: 19
Провел на форуме: 63941
Репутация:
0
|
|
Посмотрите плз код вот что я написал для своей лабы!!!!
18. Написать программу, которая находит в каждой строке матрицы F размерности m n максимальный и минимальный элементы и помещает их на место первого и последнего элемента строки соответственно.
Код:
#include<iostream>
#include<alloc.h>
#include<conio.h>
using namespace std;
int main()
{
int i,j,x;
cout<<endl<<"m=";
int m;
cin>>m;
cout<<endl<<"n=";
int n;
cin>>n;
if(m<1||n<1) return -1;
double**a=new double*[m];
for(i=0;i<m;i++)
{
a[i]=new double[n];
for(int j=0;j<n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
}
int k;
int*b=new int[m];
int min,l;
i=0;x=0;
while(i<m)
{
int min=a[i][0],max=a[i][0],l;
for(int j=1;j<n;++j)
{
if (a[i][j]<min) min=a[i][j];
if (a[i][j]>max) max=a[i][j];
}
l=(2*m-i);
b[l]=max;
b[i]=min;
++i;
}
int p;
for (p=0;p<m;p++){
cout<<"b["<<p<<"]="<<b[p];}
getch ();
return 0;
}
|
|
|

13.12.2008, 01:26
|
|
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме: 414311
Репутация:
110
|
|
2HencH_MaN
Уважай тех к кому обращаешься за помощью. Код, который ты привел, просто нечетабелен. Мне реально влом напрягаться, вчитываясь в эту кашу. Раставь нормально отступы, сгруппируй определения и тд. Тебе же самому будет приятно смотреть, на красиво структурированный код.
Да и в чём собственно вопрос?
|
|
|

13.12.2008, 03:12
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
наверно у него утечка памяти 8))) так активно new использует что даже забыл что есть и delete!
|
|
|

13.12.2008, 11:55
|
|
Banned
Регистрация: 02.01.2008
Сообщений: 195
Провел на форуме: 523549
Репутация:
301
|
|
задачи на паскале:
Код:
_http://contest.samara.ru/ru/contests/139/
ps: не для слабонервных 
|
|
|

13.12.2008, 13:00
|
|
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме: 1417964
Репутация:
665
|
|
Сообщение от N1K70
задачи на паскале:
Код:
_http://contest.samara.ru/ru/contests/139/
ps: не для слабонервных 
и что ты этим хотел сказать?
|
|
|

13.12.2008, 21:51
|
|
Новичок
Регистрация: 08.02.2008
Сообщений: 19
Провел на форуме: 63941
Репутация:
0
|
|
Сообщение от izlesa
2HencH_MaN
Уважай тех к кому обращаешься за помощью. Код, который ты привел, просто нечетабелен. Мне реально влом напрягаться, вчитываясь в эту кашу. Раставь нормально отступы, сгруппируй определения и тд. Тебе же самому будет приятно смотреть, на красиво структурированный код.
Да и в чём собственно вопрос?
Вопрос в том что упорядочивание не производиться
PHP код:
#include<iostream>
#include<alloc.h>
#include<conio.h>
using namespace std;
int main()
{
int i,j,x;
cout<<endl<<"m=";
int m;
cin>>m;
cout<<endl<<"n=";
int n;
cin>>n;
if(m<1||n<1) return -1;
double**a=new double*[m];
for(i=0;i<m;i++)
{
a[i]=new double[n];
for(int j=0;j<n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
}
int k;
int*b=new int[m];
int min,l;
i=0;x=0;
while(i<m)
{
int min=a[i][0],max=a[i][0],l;
for(int j=1;j<n;++j)
{
if (a[i][j]<min) min=a[i][j];
if (a[i][j]>max) max=a[i][j];
}
l=(2*m-i);
b[l]=max;
b[i]=min;
++i;
}
int p;
for (p=0;p<m;p++){
cout<<"b["<<p<<"]="<<b[p];}
getch ();
return 0;
}
Последний раз редактировалось HencH_MaN; 13.12.2008 в 21:53..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|