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

Форум C++

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Есть код программы на Borland C++ Builder 6 помогите вставить счетчик
 
 автор: Luxury31   (21.12.2008 в 15:46)   письмо автору
 
 

Помощь нужна срочно, пожалуйста!!!вот код программы! нужно вставить счетчик!

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include<conio.h>
#include<iostream.h>
//сортировка вставками
void insert (int n, int x[])
{
int i, j, t;
for (i=0; i<n; i++)
{
t = x[i];
for (j=i-1; j>=0 && x[j]>t; j--)
{
x[j+1]=x[j];
}
x[j+1]=t;

}
}
int main()
{
int x[]= {4, 8,2,84,12,1};
int n=6;

insert(n, x);
for(int t = 0; t < n; t++)
{
cout << x[t] << " ";
}

getch ();
return 0;
}

  Ответить  
 
 автор: EXP   (21.12.2008 в 18:05)   письмо автору
 
   для: Luxury31   (21.12.2008 в 15:46)
 

непонятно что хотите посчитать,

если колличество итераций вложенного цикла в функции insert() ,
то как-то так наверное

#ifdef __BORLANDC__
  #pragma argsused
#endif
#include <iostream.h>
#include <conio.h>
using namespace std;

int insert (int n, int x[])
{
 int i, j, t, counter = 0;
 for (i=0; i<n; i++)
 {
   t = x[i];
 counter += i;
   for (j=i-1; j>=0 && x[j]>t; j--)
   {
     x[j+1]=x[j];
   }
   x[j+1]=t;
 }
 return counter;
}

int main()
{
 int x[]= {4, 8,2,84,12,1};
 int n=6;
 cout << insert(n, x)<<" итераций" << endl;
 for(int t = 0; t < n; t++)
 {
   cout << x[t] << " ";
 }

 getch();
 return 0;
}

  Ответить  
 
 автор: exp   (21.12.2008 в 18:39)   письмо автору
 
   для: EXP   (21.12.2008 в 18:05)
 

вообщето кажется тожесамое что и просто написать

cout << ((n*n)-n)/2 <<" итераций" << endl;

  Ответить  
 
 автор: Luxury31   (21.12.2008 в 18:44)   письмо автору
 
   для: exp   (21.12.2008 в 18:39)
 

Спасибо что Вы откликнулись на мой призыв о помощи!
Мне надо в самом коде прописать:
1) Общее число проходов цикла
2) Общее число операций сравнений
3) Общее число операций сдвигов

  Ответить  
 
 автор: exp   (21.12.2008 в 19:53)   письмо автору
830 байт
 
   для: Luxury31   (21.12.2008 в 18:44)
 

не очень понимаю задачку :)
например если всего раз прохождения могло-бы быть 'counter',
но на самом деле их 'zamen' удачных
и как при этом посчитать сколько всего сравнений вместе с удачными можно померить как 'vs' в цикле

или я ещё чегоито не соображу ;)
прикрепил

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

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

int insert (int n, int x[])
{
 int i, j, t, counter = 0, zamen = 0, vs=0;
 for (i=0; i<n; i++)
 {
   t = x[i];
   counter += i; // были-бы сравнения пока i>0
   // операций сравнения думаю будет в counter и ((n*n)-n)/2 одинаково
   for (j=i-1; j>=0 && vs++ /* vs */ && x[j]>t; j--)
   {
     x[j+1]=x[j];
     // колличество замен надо считать здесь наверное
     zamen++;
   }
   x[j+1]=t;
 }

 cout << vs <<" vsego sravnenij" << endl;
  return zamen;
}

int main()
{
 int x[]= {4, 8,2,84,12,1};
 int n=6;

 cout << ((n*n)-n)/2 <<" obwee 4islo prohodov cikla" << endl; // число проходов цикла
 cout << insert(n, x)<<" Obwee 4islo sdvigov " << endl;  //странно но тут считается именно это
 for(int t = 0; t < n; t++)
 {
   cout << x[t] << " ";
 }

 getch();
 return 0;
}

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

я потом подумал, может такое имелось ввиду :)

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

void insert (int n, int x[])
{
 int i, j, t, dv = 0, p = 0, vs=0;
 // vs - сравнений
 // p - прохождений наверное (цикл выполнился хоть один раз)
 // dv - сдвигов
 for (i=0; i<n; i++) {
   t = x[i];
   for (j=i-1; j>=0 && vs++ /*vs*/ && x[j]>t; j--) {
     x[j+1]=x[j];
     dv++; /* dv */
   }
   x[j+1]=t;
   if (i!=j+1) p++; /* p */
 }
 cout << vs <<" vs" << endl;
 cout << dv <<" dv" << endl;
 cout << p <<" p" << endl;
}

int main() {
 int x[]= {4, 8,2,84,12,1};
 int n=6;

insert(n, x);

 for(int t = 0; t < n; t++) {
   cout << x[t] << " ";
 }
 getch();
 return 0;
}

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

// p - прохождений наверное (цикл выполнился хоть один раз)
вот тут мне надо что бы просчитывалось это действие ((n*n)-n)/2

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

 cout << p <<" p" << endl;
могу ли я тут заменить << p << на << ((n*n)-n)/2 <<

  Ответить  
 
 автор: 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++ всегда будет больше нуля и присвоение будет выполняться только когда необходимо.
Но я так и не понял эта-ли цифра нужна :) фактически это важная цифра могущая получиться только при выполнении, и олзначает сколько-же раз пришлось гонять внутренний цикл

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

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

_

  Ответить  
 
 автор: 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;

}

  Ответить  
 
 автор: 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;
}

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

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

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

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

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

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

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

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

  Ответить  
 
 автор: 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 в 14:43)   письмо автору
 
   для: EXP   (22.12.2008 в 12:18)
 

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

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

  Ответить  
 
 автор: 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)
 

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

  Ответить  
Rambler's Top100
вверх

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