Исходник программы - Сортировка подсчетом рациональных дробей на Си(C++)


Добавил:DMT
Дата создания:29 апреля 2008, 17:26
Дата обновления:29 апреля 2008, 17:27
Просмотров:5564 последний сегодня, 14:01
Комментариев: 0
Исходник программы - Сортировка подсчетом рациональных дробей на Си(C++) 1)Определяется класс объектов массива, предназначенного для сортировки. Перегрузить для него операцию присваивания и операции сравнения <, <=, ==, >=, >.
2) Программа, сортирующую массив объектов построенного класса с помощью написанной параметризованной подпрограммы.
Код на C++
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<iostream.h>
  4. #include<conio.h>
  5. #define kol 5
  6. class drob
  7. { protected :
  8. int m,n;
  9. public :
  10. void inrnd(int );
  11. friend ostream& operator<<(ostream &, drob &);
  12. friend istream& operator>>(istream &, drob &);
  13. drob operator=(drob &q){m=q.m;n=q.n;return q;}
  14. int operator<=(drob q){if(m*q.n-q.m*n<=0)return 1;else return 0;}
  15. int operator<(drob q){if(m*q.n-q.m*n<0)return 1;else return 0;}
  16. int operator>=(drob q){if(m*q.n-q.m*n>=0)return 1;else return 0;}
  17. int operator>(drob q){if(m*q.n-q.m*n>0)return 1;else return 0;}
  18. int operator==(drob q){if(m*q.n-q.m*n==0)return 1;else return 0;}
  19. void delitel(float a1,float m1);
  20. };
  21. void drob::inrnd(int n1=1)
  22. { m=random(20)+1;
  23. n=random(30)+1;
  24. delitel(m,n);}
  25. istream& operator>>(istream &fi,drob &fp)
  26. { cout<<"m=";scanf("%d",&fp.m);
  27. cout<<"n=";scanf("%d",&fp.n);
  28. if(fp.n<=0){cout<<"ERROR";exit(-1);}
  29. return fi;}
  30. void drob::delitel(float a1,float m1)
  31. { int k;
  32. float f=1;
  33. if(a1>m1){k=m1;}
  34. if(a1<m1){k=a1;}
  35. if(a1==0){a1++;}
  36. if(m1==0){m1++;}
  37. if(a1==m1){n=1;m=1;}
  38. for(float i=1;i<=k;i++)
  39. { if((a1/i)==int(a1/i)&((m1/i)==int(m1/i))){f=i;} }
  40. if(n<0&m>0){n=n*-1;m=m*-1;}
  41. m=m/f;n=n/f; }
  42. ostream &operator<<(ostream &fo,drob &fp){fo<<fp.m<<"/"<<fp.n;return fo;}
  43. template <class Type>
  44. void shell(Type *x, int n)
  45. { int i,j;
  46. Type *temp=new Type[n];
  47. int *count=new int[n];
  48. for (i=0;i<n;i++) temp[i]=x[i];
  49. for (i=0; i<n; i++) count[i]=0;
  50. for (i=n-1; i>=1;i--)
  51. for(j=i-1; j>=0; j--)
  52. if (x[i]<x[j]) count[j]++;
  53. else count[i]++;
  54. for (i=0;i<n;i++) x[count[i]]=temp[i];}
  55. template <class Type>void print(Type *x,int n1)
  56. {for(int i=0;i<n1;i++){cout<<x[i]<<" ";}}
  57. void main()
  58. { clrscr(); randomize();
  59. drob *mas;
  60. mas=new drob[kol];
  61. int k1=1;
  62. //масив целых чиселы
  63. int *mas2=new int[kol];
  64. for(int i=0;i<kol;i++){mas2[i]=random(40)*k1;k1*=-1;}
  65. cout<<"\n\nМассив целых чисел:\n";
  66. print(mas2,kol);
  67. cout<<"\n\nОтсортированный массив:\n";
  68. shell(mas2,kol);
  69. print(mas2,kol);
  70. //массив чисел с плавающей точкой
  71. float *mas3=new float[kol];
  72. for(i=0;i<kol;i++){mas3[i]=random(30)+0.5;}
  73. cout<<"\n\nМассив чисел с плавающей точкой:\n";
  74. print(mas3,kol);cout<<"\n\nОтсортированный массив:\n";
  75. shell(mas3,kol);
  76. print(mas3,kol);
  77. for(i=0;i<kol;i++)
  78. {mas[i].inrnd(k1);k1*=-1;}
  79. cout<<"\n\n Массив объектов класса:\n";
  80. for(i=0;i<kol;i++)
  81. {cout<<mas[i]<<" ";}
  82. //print(mas,kol);
  83. cout<<"\n\nОтсортированные объекты массива:\n";
  84. shell(mas,kol);
  85. print(mas,kol);
  86. getch();}
При использовании обязательна ссылка на http://DMTSoft.ru
up