Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написать прогу Sort 
:(
    Опции темы
Wound
Дата 21.5.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.5.2008

Репутация: нет
Всего: нет



Товарищи, помагите, пожалуйста, я в тупике :(

Написать прогу Sort, реализующую следующий алгоритм:
1. Зафиксировать время начала Tstrt выполнения проги.
2. Вывести на экран время Tstrt в формате: минуты, секунды, миллисекунды.
3. Для i от 1 до 100 (колличество повторений может біть изменено в зависимости от быстродействия процессора) повторять:
- заполнения массива целых чисел случайными значениями из диапазона 0-1000
- зафиксировать текущий момент времени t1
- отсортировать массив
- зафиксировать текущий момент времения t2
- определить время и-той сортировки dti=t2-t1
4. Определение среднего времени сортировки суммаdti/100
5. Вывести на экран среднее время одной сортировки
6. Зафиксировать время окончания Tend выполнения проги
7. Вывести на экран время Tend в формате:  минуты, секунды, миллисекунды
Метод сортировки - вставки; направление сортировки - убывание; количество элемнтов массива - N-90; количество процессов -4

Набросал код:
Код

#pragma hdrstop
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
char cmd[128];
if (argc!=1)
strcpy(cmd,argv[1]);
else
strcpy(cmd,"RGR.exe");
int pid=GetCurrentProcessId();
sprintf(cmd+strlen(cmd)," %d",pid);
cout<<"STARTING PROCESS :" << cmd << "\n";
cout.flush();
STARTUPINFO info;
memset(&info,0,sizeof(info));
info.cb=sizeof(info);
PROCESS_INFORMATION pinfo;
if (!CreateProcess(NULL,cmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,
NULL,NULL,&info,&pinfo))
{
cout<<"MAIN PROGRAM: RGR.EXE process is not running NOW\n";
cout<<"MAIN PROGRAM: CHECK THE NAME OF THE PROCESS IN CMD\n";
}
cout<<"STARTING\n";
cout.flush();
Sleep(12000);
cout<<"EXITING\n";
getch();
exit(0);

}
//---------------------------------------------------------------------------



Второй листинг, сама сортировка:
//---------------------------------------------------------------------------
#pragma hdrstop
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "windows.h"
//---------------------------------------------------------------------------
// ФУНКЦИЯ СОРТИРОВКИ МАССИВА
//---------------------------------------------------------------------------
void straightSelectionSort(int B[], int col){
int i, j, k;
int item;
for ( i = 0; i < col-1; i++ ){
item = B[i];
k = i;
for ( j = i+1; j < col; j ++ ) {
if (B[j] <= item) {
k = j;
item = B[k];
}
}
B[k] = B[i];
B[i] = item;
}
}
#pragma argsused
int main(int argc, char* argv[])
{
const colCount = 10;
randomize();
//--------------------------------------------------------------------
int rowCount = 0;
int i, j;
double sort_start, sort_end;
SYSTEMTIME p_start, p_end;
//--------------------------------------------------------------------
GetLocalTime(&p_start);
printf("\t \t \t \t Starting program at %d:%d:%d \n", p_start.wHour,p_start.wMinute,p_start.wSecond);
printf("Vvedite kolichestvo strok massiva rowCount = ");
scanf("%d", &rowCount);
if (rowCount <= 0) rowCount = 1;
int (*A) [colCount] = new int [rowCount][colCount];
//--------------------------------------------------------------------
printf("\n\n\tElements of massiv: \n");
for (i = 0; i < rowCount; i++){
for (j = 0; j < colCount; j++)
printf("%d", A[i][j] = random(10001));
printf("\n");
}
// фиксируем момент времени T1
sort_start = clock();
//--------------------------------------------------------------------
int *B = (int *) A;
//--------------------------------------------------------------------
for (i = 0; i < rowCount; i++){
for (j = 0; j < colCount; j++)
B[i * colCount + j] = A[i][j];
}
//--------------------------------------------------------------------
printf("\n\n\tElements of 2D massiv in 1D massiv: \n");
for (i = 0; i < (rowCount*colCount); i++){
printf ("%d", B[i]);
printf("\t");
}
//--------------------------------------------------------------------
printf("\n \n \n \tPress <ENTER> to sort elements!");
int sort;
sort = getch();
switch(sort){
case 13:printf("\n \n \n \tSorting ...");
straightSelectionSort( B, (rowCount*colCount) );
break;
default: printf("\n \n \n \tUknown error!");
Sleep(2000);
exit(1);
}
//--------------------------------------------------------------------
Sleep(4000);
printf("\n \n \n \t Sorted elements of massiv: \n");
for (i = 0; i < (rowCount*colCount); i++){
printf("%d", B[i]);
printf("\t");
}
sort_end = clock();
printf("\n\n\n\tThe time was: %f\n",
(sort_end - sort_start) / CLK_TCK);
int key;
key = getch();
switch(key){
case 13:
GetLocalTime(&p_end);
printf("\n \n \t \t \t \t \tEnding program at %d:%d:%d \n", p_end.wHour,p_end.wMinute,p_end.wSecond);
break;
default: printf("\n \n \t \tFor exit press <ENTER>");
}
delete [] A, B;
getch();
return 0;
}
//---------------------------------------------------------------------------


Препод закритиковал без обяснений. Подскажите, что тут исправить или переделать? 

Заранее всем огромное спасибо!

M
archimed7592
Цитата(Wound @  21.5.2008,  19:37 Найти цитируемый пост)
Подскажите, что тут исправить или переделать? 

Для начала,  научиться пользоваться тэгом code или кнопкой "Код" совсем не помешает :).


Это сообщение отредактировал(а) archimed7592 - 21.5.2008, 22:31
PM MAIL   Вверх
Wound
Дата 21.5.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.5.2008

Репутация: нет
Всего: нет



Умное замечение, согласен. Но на то это и раздел "Для новичков", где, я думаю, эта оплошность простится.
А что насчет смысла моего сообщения? Хоть намекните что куда...
PM MAIL   Вверх
bsa
Дата 22.5.2008, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Wound, ну, для начала код надо отформатировать (расставить отступы).
Затем заполнение массива случайными числами и сортировку оформить отдельными функциями. Ну а там посмотрим.
PM   Вверх
jonie
Дата 22.5.2008, 10:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



а ябы начал с допроса препода)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Wound
Дата 23.5.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.5.2008

Репутация: нет
Всего: нет



bsa, а если по подробнее, а лучше с примером или наброской. Ибо все, что я знал, уже использовал :(
PM MAIL   Вверх
jonie
Дата 23.5.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



возможно стоит внести вычисление времени в функцию сортировки. сделать ее перегрузку с параметром time_t& ... пусть она сама позаборится о времени.
заполнение массива сделать функций, аналогично сортировке (что уже есть).
сделать функцию swap (например, темплейтную)
переменные, локальные по смыслу вносить в циклы. например for(int i=0......)
потом можно от явных циклов отказаться и использовать std::foreach и т.п.
потом отказатся от функций и использовать классы
потом......
фантазия безгранична.

почитайте там http://vr-online.ru/review.php?id=133  быть может, подскажет в какую сторону не развиваться...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bsa
Дата 23.5.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Wound @ 23.5.2008,  00:04)
bsa, а если по подробнее, а лучше с примером или наброской. Ибо все, что я знал, уже использовал :(

форматирование (отступы):
Код
int main()
{
   int a = 0;
   int b = 1;
   if (a == b) {
       switch(a) {
          case 1:
             break;
          default:
             break;
       }
   } else if (a == 2) {
       int i;
       for(i = 0; i < 10; ++i) { //хочу обратить внимание на использование префиксной формы оператора ++
           //что-то
       }
   }
   return 0;
}
Функция заполнения массива:
Код
void fillArray(int array[], unsigned size)
{
   while(size--) //вот здесь и нужна постфиксная форма оператора --
      array[size] = rand();
}
Кстати, я у тебя заметил две функции main(). Тебе точно нужно, чтобы один процесс запускал другой?
Может проще перед вызовом цикла сортировок сохранить текущее время, а после окончания - вычесть из текущего - получишь время сортировки.
PM   Вверх
dragomir
Дата 24.5.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.1.2007
Где: Брянск

Репутация: нет
Всего: нет



Если не ошибаюсь есть стандартная функция в Borland C++ 3.5 для сортировки массива
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.