Помогите срочно решить одну задачку. До завтра надо сделать. |

02.04.2010, 19:25
|
|
Новичок
Регистрация: 24.08.2009
Сообщений: 17
С нами:
8796769
Репутация:
-9
|
|
Помогите срочно решить одну задачку. До завтра надо сделать.
Спроектировать и разработать программу позволяющую создавать процессы и
управлять уже созданными. Программа должна обладать следующим набором
возможностей:
В интерактивном режиме запускать указанные процессы.
Уничтожать указанный процесс (уничтожаться могут только процессы запущенные
программой). Уничтожаемый процесс указывается либо его описателем, либо
выбирается в интерактивном режиме.
Показать список всех процессов (а также своих копий) запущенных программой.
Программа должна знать о всех своих запушенных копиях.
Программа должна уметь обмениваться со своими копиями списками порождённых
процессов.
При закрытии программы она должна уничтожить все порождённые ею процессы.
Примечания:
Новый процесс запускается функцией CreateProcess и уничтожается функцией
TerminateProcess.
Запускаемый процесс указывается именем своего исполняемого файла.
Для обмена данными между копиями программы можно использовать переменные
окружения. Для работы с переменными окружения используются следующие функции:
GetEnvironmentVariable, SetEnvironmentVariable.
В случае реализации программы в консольном варианте для обработки попыток
закрытия программы необходимо использовать функцию SetConsoleCtrlHandle.
Описание необходимых функций можно посмотреть в MSDN Library.
Пользовательский интерфейс может быть реализован в любом варианте (текстовый,
графический).Спроектироват ь и разработать программу позволяющую создавать процессы и
управлять уже созданными. Программа должна обладать следующим набором
возможностей:
В интерактивном режиме запускать указанные процессы.
Уничтожать указанный процесс (уничтожаться могут только процессы запущенные
программой). Уничтожаемый процесс указывается либо его описателем, либо
выбирается в интерактивном режиме.
Показать список всех процессов (а также своих копий) запущенных программой.
Программа должна знать о всех своих запушенных копиях.
Программа должна уметь обмениваться со своими копиями списками порождённых
процессов.
При закрытии программы она должна уничтожить все порождённые ею процессы.
Примечания:
Новый процесс запускается функцией CreateProcess и уничтожается функцией
TerminateProcess.
Запускаемый процесс указывается именем своего исполняемого файла.
Для обмена данными между копиями программы можно использовать переменные
окружения. Для работы с переменными окружения используются следующие функции:
GetEnvironmentVariable, SetEnvironmentVariable.
В случае реализации программы в консольном варианте для обработки попыток
закрытия программы необходимо использовать функцию SetConsoleCtrlHandle.
Описание необходимых функций можно посмотреть в MSDN Library.
Пользовательский интерфейс может быть реализован в любом варианте (текстовый,
графический).
|
|
|

02.04.2010, 19:26
|
|
Новичок
Регистрация: 24.08.2009
Сообщений: 17
С нами:
8796769
Репутация:
-9
|
|
Заранее благодарен=) Предпосительный язык - C#
|
|
|

02.04.2010, 21:51
|
|
Постоянный
Регистрация: 13.11.2009
Сообщений: 437
С нами:
8680278
Репутация:
17
|
|
Сообщение от Porrter
Заранее благодарен=) Предпосительный язык - C#
Что WinApi + C# это гемор!
Лучше сам пиши на С++. Примеров дофига 
|
|
|

03.04.2010, 20:59
|
|
Познающий
Регистрация: 28.02.2010
Сообщений: 35
С нами:
8527168
Репутация:
0
|
|
Задача следующего плана:
составить программу, сравнивающую три вида сортировок (любые сортировки т.е. быстрая, пузырьком и т. д. все годятся) и выдающую в результате сколько времени было затрачено на сортировку массива данных. (желательный размер массива ~100 кб, чтобы разница во времени была очевидной)
язык C/C++
заранее благодарен.
|
|
|

04.04.2010, 11:22
|
|
Новичок
Регистрация: 29.03.2010
Сообщений: 6
С нами:
8484458
Репутация:
0
|
|
Сообщение от Lewis Carroll
Задача следующего плана:
составить программу, сравнивающую три вида сортировок (любые сортировки т.е. быстрая, пузырьком и т. д. все годятся) и выдающую в результате сколько времени было затрачено на сортировку массива данных. (желательный размер массива ~100 кб, чтобы разница во времени была очевидной)
язык C/C++
заранее благодарен.
хм... наверно что-то такое
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
void bubble(char *items, int count);
void shaker(char *items, int count);
void shell(char *items, int count);
int main(void)
{
FILE *fp;
FILE *s1;
FILE *s2;
FILE *s3;
char s[255];
time_t start, end;
volatile long unsigned t;
printf("read file");
if((fp = fopen("mass.txt", "r")) == NULL) {
printf(" : error.\n");
exit(1);
}
printf(" : ok.\n\n");
while(!feof(fp)) {
fgets(s, 253, fp);
}
start = time(NULL);
bubble(s, strlen(s));
end = time(NULL);
s1 = fopen("bubble.txt", "w");
fputs(s, s1);
printf("Bubble sort : ok.\n");
printf("time: %f s.\n\n", difftime(end, start));
start = time(NULL);
shaker(s, strlen(s));
end = time(NULL);
s2 = fopen("shaker.txt", "w");
fputs(s, s2);
printf("Cocktail shaker sort : ok.\n");
printf("time: %f s.\n\n", difftime(end, start));
start = time(NULL);
shaker(s, strlen(s));
end = time(NULL);
s3 = fopen("shell.txt", "w");
fputs(s, s3);
printf("Donald Lewis Shell sort : ok.\n");
printf("time: %f s.\n\n", difftime(end, start));
fclose(fp);
fclose(s1);
fclose(s2);
fclose(s3);
return 0;
}
// bubble sort
void bubble(char *items, int count)
{
register int a, b;
register char t;
for(a = 1; a < count; ++a)
for(b = count-1; b >= a; --b) {
if(items[b-1] > items[b]) {
t = items[b-1];
items[b-1] = items[b];
items[b] = t;
}
}
}
// cocktail shaker sort
void shaker(char *items, int count)
{
register int a;
int exchange;
char t;
do{
exchange = 0;
for(a = count-1; a >0; --a) {
if(items[a-1] > items[a]) {
t = items[a-1];
items[a-1] = items[a];
items[a] = t;
exchange = 1;
}
}
for(a = 1; a < count; ++a) {
if(items[a-1] > items[a]) {
t = items[a-1];
items[a-1] = items[a];
items[a] = t;
exchange = 1;
}
}
} while(exchange);
}
// Donald Lewis Shell sort
void shell(char *items, int count)
{
register int i, j, gap, k;
char x, a[5];
a[0] = 9; a[1] = 5; a[2] = 3; a[3] = 2; a[4] = 1;
for(k = 0; k < 5; k++) {
gap = a[k];
for(i = gap; i < count; ++i) {
x = items[i];
for(j=i-gap; (x < items[j]) && (j >= 0); j = j-gap)
items[j+gap] = items[j];
items[j+gap] = x;
}
}
}
p.s. размер сортируемых данных думаю сам изменишь 
|
|
|

04.04.2010, 15:00
|
|
Познающий
Регистрация: 28.02.2010
Сообщений: 35
С нами:
8527168
Репутация:
0
|
|
Сообщение от comichero92
хм... наверно что-то такое
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
void bubble(char *items, int count);
void shaker(char *items, int count);
void shell(char *items, int count);
int main(void)
{
FILE *fp;
FILE *s1;
FILE *s2;
FILE *s3;
char s[255];
time_t start, end;
volatile long unsigned t;
printf("read file");
if((fp = fopen("mass.txt", "r")) == NULL) {
printf(" : error.\n");
exit(1);
}
printf(" : ok.\n\n");
while(!feof(fp)) {
fgets(s, 253, fp);
}
start = time(NULL);
bubble(s, strlen(s));
end = time(NULL);
s1 = fopen("bubble.txt", "w");
fputs(s, s1);
printf("Bubble sort : ok.\n");
printf("time: %f s.\n\n", difftime(end, start));
start = time(NULL);
shaker(s, strlen(s));
end = time(NULL);
s2 = fopen("shaker.txt", "w");
fputs(s, s2);
printf("Cocktail shaker sort : ok.\n");
printf("time: %f s.\n\n", difftime(end, start));
start = time(NULL);
shaker(s, strlen(s));
end = time(NULL);
s3 = fopen("shell.txt", "w");
fputs(s, s3);
printf("Donald Lewis Shell sort : ok.\n");
printf("time: %f s.\n\n", difftime(end, start));
fclose(fp);
fclose(s1);
fclose(s2);
fclose(s3);
return 0;
}
// bubble sort
void bubble(char *items, int count)
{
register int a, b;
register char t;
for(a = 1; a < count; ++a)
for(b = count-1; b >= a; --b) {
if(items[b-1] > items[b]) {
t = items[b-1];
items[b-1] = items[b];
items[b] = t;
}
}
}
// cocktail shaker sort
void shaker(char *items, int count)
{
register int a;
int exchange;
char t;
do{
exchange = 0;
for(a = count-1; a >0; --a) {
if(items[a-1] > items[a]) {
t = items[a-1];
items[a-1] = items[a];
items[a] = t;
exchange = 1;
}
}
for(a = 1; a < count; ++a) {
if(items[a-1] > items[a]) {
t = items[a-1];
items[a-1] = items[a];
items[a] = t;
exchange = 1;
}
}
} while(exchange);
}
// Donald Lewis Shell sort
void shell(char *items, int count)
{
register int i, j, gap, k;
char x, a[5];
a[0] = 9; a[1] = 5; a[2] = 3; a[3] = 2; a[4] = 1;
for(k = 0; k < 5; k++) {
gap = a[k];
for(i = gap; i < count; ++i) {
x = items[i];
for(j=i-gap; (x < items[j]) && (j >= 0); j = j-gap)
items[j+gap] = items[j];
items[j+gap] = x;
}
}
}
p.s. размер сортируемых данных думаю сам изменишь 
а вторая сортировка это какая ?
первая - пузырек, третья - Шелла.. а вторая - ?..)
|
|
|

04.04.2010, 15:21
|
|
Новичок
Регистрация: 29.03.2010
Сообщений: 6
С нами:
8484458
Репутация:
0
|
|
шейкер сортировка(shaker sort), модифицированная пузырьковая
|
|
|

04.04.2010, 13:04
|
|
Познающий
Регистрация: 28.02.2010
Сообщений: 35
С нами:
8527168
Репутация:
0
|
|
Большое спасибо )) а как работать с сортируемыми файлами? создать соответствующие файлы (bubble.txt shaker.txt shell.txt) заполненные данными?
Последний раз редактировалось Lewis Carroll; 04.04.2010 в 13:38..
|
|
|

04.04.2010, 14:52
|
|
Новичок
Регистрация: 29.03.2010
Сообщений: 6
С нами:
8484458
Репутация:
0
|
|
создать файл mass.txt, в нем то что будем сортировать, файлы bubble.txt, shell.txt и shaker.txt сами создадутся и в них будут отсортированные данные
|
|
|

04.04.2010, 17:35
|
|
Познающий
Регистрация: 28.02.2010
Сообщений: 35
С нами:
8527168
Репутация:
0
|
|
А можно ли как то реализовать такую фичу, чтобы на основании затраченного времени строилась гистограмма для каждой сортировки?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|