Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Есть код программы на Borland C++ Builder 6 помогите вставить счетчик

Сообщения:  [1-10]   [11-19] 

 
 автор: Luxury31   (22.12.2008 в 15:04)   письмо автору
 
   для: exp   (22.12.2008 в 14:43)
 

>нашёл что в BuilderX есть кнопка Help :)......Хочешь сказать раньше не замечал?))

  Ответить  
 
 автор: Luxury31   (22.12.2008 в 15:03)   письмо автору
 
   для: EXP   (22.12.2008 в 12:18)
 

Еще раз спасибо за помощь!Сегодня сдала,препод даже ничего и против не сказала!В общем ей понравилось!)))

  Ответить  
 
 автор: exp   (22.12.2008 в 14:43)   письмо автору
 
   для: EXP   (22.12.2008 в 12:18)
 

похоже просто)
delete[] arr;
delete[] aOut;

нашёл что в BuilderX есть кнопка Help :)

  Ответить  
 
 автор: EXP   (22.12.2008 в 12:18)   письмо автору
 
   для: exp   (22.12.2008 в 04:50)
 

или показалось :)
#include <iostream>
using namespace std;
const size_t MAX = 20;

void printArray(int *arr, size_t max) {
    for(size_t i = 0; i < max; ++i) {
        cout << " "<< arr[i] ;
    }
    cout << endl;
// printArray

void bubbleSort(int arr[], size_t max) {
    size_t i, j;
    int t;
    size_t mov=0, vs=0;

    for(i = 1; i < max; ++i) {
        for(j = 0; j < max - i; ++j) {
            if (arr[j] > arr[j+1]) {
                t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t;
                mov+=3;
            } vs++;
        }
    }
  cout<< "\n\tbubbleSort: vs = "<< vs <<"; mov = "<< mov <<";\n";
  printArray(arr, max);

// bubbleSort

void insert (size_t n, int x[])
{
 int j, t;
 size_t i,  mov=0, vs=0;

 for (i=0; i<n; i++)
 {
   t = x[i];
   mov++;
   for (j=i-1; j>=0 && ( ++vs ) && x[j]>t; j--)
   {
     x[j+1] = x[j];
     mov++;
   }
   if ((int)i != (j=j+1) && (mov++)) x[j]=t;
 }
 cout<< "\n\tinsert: vs = "<< vs <<"; mov = "<< mov <<";\n";
  printArray(x, n);
}



int main() {
    size_t emax=1, i;
while(1) {
 while(1) {
   cout<<"Enter the number of elements (2-"<< MAX <<") or 0 for exit: ";
   cin>>emax;
   if (!emax) return 0;
   if (emax>1 && emax <= MAX) break;
 }
 int *arr = new int[emax];
 int *aOut = new int[emax];

 cout <<"\n\nEnter the elements now :\n\t";
 for (i = 0; i < emax; i++) cin>>arr[i];


  /*  копирование */
 for (i = 0; i < emax; i++) aOut[i] = arr[i];

 bubbleSort(aOut, emax);
 insert(emax, arr);

 delete arr;
 delete aOut;
 }
}
но всёравно не пойму как сравнить точнее, в insert во временную t = x[i]; записывается иногда лишний раз, но если не записывать это ещё одно сравнение.
и со всякими i, j .. - тоже операции производятся

  Ответить  
 
 автор: exp   (22.12.2008 в 04:50)   письмо автору
1.5 Кб
 
   для: Luxury31   (21.12.2008 в 23:55)
 

Или я что-то упустил , или эта insert() делает ошибки , в частности с массивом из трёх элементов

перереприкрепил сюда

попробовал сделать всё одними и теми-же функциями и посчитать перезаписи елементов и проверки

//upd
возможно неправильно применил эти delete () и new(), но не нашёл как это делать правильно

  Ответить  
 
 автор: Luxury31   (21.12.2008 в 23:55)   письмо автору
 
   для: exp   (21.12.2008 в 23:33)
 

По сути в этом коде тоже должен стоять счеткик сдвигов и сравнений( вот только у меня это не получается сделать

  Ответить  
 
 автор: exp   (21.12.2008 в 23:33)   письмо автору
 
   для: Luxury31   (21.12.2008 в 21:56)
 

здесь нечего измерить :)

void printArray(int arr[]) {
    for(size_t i = 0; i < MAX; ++i) {
        cout << " "<< arr[i] ;
    }
    cout << endl<< "\t\xcd\xcd\xcd\xcd\xcd\n";
}// здесь менял чисто для красоты )

void bubbleSort(int arr[])
{
    size_t i, j, call_of_swap = 0, iters=0;
    for(i = 1; i < MAX; ++i) {
        for(j = 0; j < MAX - i; ++j) {
            if (arr[j] > arr[j+1])
            {
                swap(arr[j], arr[j+1]);
                call_of_swap++;
            }
            iters++;
        }
    }
  cout << "swap() calling "<< call_of_swap <<"times"<<endl;
  cout << "summary "<< iters <<" comparings :)"<<endl;
}

вторая цифра тоже будет постоянной типа той формулы , но в правильности формулы не сильно уверен

  Ответить  
 
 автор: exp   (21.12.2008 в 22:21)   письмо автору
 
   для: Luxury31   (21.12.2008 в 20:56)
 

_

  Ответить  
 
 автор: exp   (21.12.2008 в 22:20)   письмо автору
 
   для: Luxury31   (21.12.2008 в 20:56)
 

это разные величины
((n*n)-n)/2 величина постоянная, зависящая только от размера массива

а количество выполнений хотябы по одному разу вложенного цикла
зависит от структуры входящего массива и от того насколько нужно его пересортировать

можно просто упростить так код написав

if (i != j+1 && p++) x[j+1] = t;

так как и vs++ в for p++ всегда будет больше нуля и присвоение будет выполняться только когда необходимо.
Но я так и не понял эта-ли цифра нужна :) фактически это важная цифра могущая получиться только при выполнении, и олзначает сколько-же раз пришлось гонять внутренний цикл

а колличество возможных в самом худшем случае итераций внутреннего цикла думаю ненужно
, внешнего оно тоже постоянная равная размеру массива

  Ответить  
 
 автор: Luxury31   (21.12.2008 в 21:56)   письмо автору
 
   для: EXP   (21.12.2008 в 20:47)
 

сможещь помочь в этой задаче тоже нужны счетчики такие же как и в первой?Вот код:

#include <iostream>
#include <algorithm>
#include <conio.h>
using namespace std;

const size_t MAX = 5;

void printArray(int arr[])
{
    for(size_t i = 0; i < MAX; ++i)
    {   
        cout << arr[i] << endl;
    }   
}

void bubbleSort(int arr[])
{
    size_t i, j;
    for(i = 1; i < MAX; ++i)
        for(j = 0; j < MAX - i; ++j)
            if (arr[j] > arr[j+1])
            {
                swap(arr[j], arr[j+1]);
            }
}

int main()
{
    int arr[MAX];
    for (size_t i = 0; i < MAX; ++i)
    {
        cout << "Vvedite element: " << endl;
        cin >> arr[i];

    }
    printArray(arr);
    bubbleSort(arr);
    cout << "Posle sortirovki: " << endl;
    printArray(arr);
getch ();
 return 0;

}

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования