Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
#1

Оцените код сортировки массива - C++

05.03.2011, 00:40. Просмотров 1324. Ответов 26
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
//--------------------------------------------------
//1.Динам. одномерный массив Х заполнить функцией rand()
//2.Симметрические числа скопировать в Y массив 
//3.Сортировать Y 
//4.Те числа, которые после сортировки не меняли свое место - скопировать в Z массив
//--------------------------------------------------
 
#include <iostream>
#include <stdlib.h>   
#include <time.h>
 
using namespace std;
//--------------------------------------------------
//1.Input X
//2.Counting symetric numbers,and return it to main. It will be size of Y array
//3.Creating Y array with his size
//4.Calling function,who writing symetric numbers to Y array
//5.Creating a T array with Y arrays size,and copy all numbers from Y to T (T IS BUFF)
//6.Sort Ascending Y array
//7.After sorting are compared T and Y arrays.
//If there is some element that did not changed his place,that element have to written to Z array.
//--------------------------------------------------
 
void inp(int* x,int n);         // input x
void out(int* x,int n);         //out function
int symCounter(int* x,int n);      // counting for symetric nubers in X array
void sym(int* x,int n,int* y);      //coping symetric numbers to Y array
bool CheckForSym(int a);      //checking for a symetric number
void sort(int* x,int n);      //sorting Y array
void T_inp(int* y,int m,int* t);      // input of T array
int Z_counter(int* y,int m,int* t);      //Take a Z arrays size
void Z_inp(int* y,int m,int* t,int* z);         //input of Z
 
 
 
void main()
{
   int n;      //size of X array
   int Y_count,Z_count;      //sizes of Y and Z array (T arrays size = Y arrays size)
   cout<<"n=";
   cin>>n;
 
   int* x=new int[n];
   inp(x,n);      //input X
   cout<<"ARRAY X"<<endl;       //output X
   out(x,n);
   Y_count=symCounter(x,n);    //Take a Y's size,counting symetric numbers in X
   int* y=new int[Y_count];    //creating Y
   int* t=new int[Y_count];    //creating T (buff)
   sym(x,n,y);         //Input Y arrays with symetric numbers
   T_inp(y,Y_count,t); //Copy all element of array Y to T array (buff)
   cout<<endl<<"ARRAY Y BEFORE SORTING"<<endl; //outputs of Y array
   out(y,Y_count);
   sort(y,Y_count);      // Call sort fucntion,who ascending Y array
   cout<<endl<<"ARRAY Y AFTER SORTING"<<endl;
   out(y,Y_count);
   
   Z_count=Z_counter(y,Y_count,t);         //Take a size off Z array
   int* z=new int[Z_count];      //Creating of Z
   Z_inp(y,Y_count,t,z);      //input of Z
   
   cout<<endl<<"ARRAY Z"<<endl;
   out(z,Z_count);
}
 
void inp(int* array,int size)       //Input of X
{
   srand(time(0));
 
   for(int i=0;i<size;i++)
      *(array+i)=rand()%100;
}
 
void out(int* Array,int size)      //Function of arrays print
{
   for(int i=0;i<size;i++)
      cout<<*(Array+i)<<" ";
   cout<<endl<<endl;
}
 
 
bool CheckForSym(int a)         //Function for checking is that number symetric or not,if yes return 1,else 0
{
   int buff=a;
   int m=0;       // M is a size of y array.
   int i=0;      //Index of array in while loop
   bool t=1;      // Result
   while(a)      //Take a size of y array,counting block
   {
      a/=10;      
     a%=10;
      m++;         //size +1
   }
   a=buff;         //after first loop while, a=0,so we must to recover it,a=buff
   int* y=new int[m];         //creating array with m size
   
   while(a)         //Input of array,where is checking for symetric number
   {
      *(y+i++)=a%10;      //after this place, i=m
       a/=10;      
   }
 
 
  int k=i-1;      
   for(int j=0;j<i/2;j++)       // place of checking for sym number, loop from 0 to i/2
      if(*(y+j)!=*(y+k--))      //k=m-1. if not equal,loop is breaking
      {
         t=0;
         break;
      }
 
     return t;
}
 
int symCounter(int* array,int size)      //counting symetric numbers, size of Y array
{
   int count=0; //counter
   for(int i=0;i<size;i++)
      if(CheckForSym(*(array+i))==1  && *(array+i)>10)   //calling CheckForSym function,if result = 1, count + 1
         count++;
 
   return count;      //return result
}
 
 
void sym(int* x,int n,int* y)      //input of Y array,all symetric numbers writing in Y array from X
{
   int j=0;      //Y arrays index
   for(int i=0;i<n;i++)
      if(CheckForSym(*(x+i))==1 && *(x+i)>10)      //*(x+i)>10, why, be couse 5 is symetric to,we need in numbers,bigger then 10
         *(y+j++)=*(x+i);
}
 
 
 
void sort(int* x,int n)
{
   bool t=1;      //for loop while
   int buff;      //buffer
 
   while(t)
   {
      t=0;          //if "if" operator is illegal,loop breaks
      for(int i=1;i<n;i++)       // wolking on all elements
      {      
         if(*(x+i-1)>*(x+i))       // if the element > then folowing element, chage places
         {
            buff=*(x+i-1);
            *(x+i-1)=*(x+i);
            *(x+i)=buff;
 
            t=1;         //if "if" operator is legal,loop will spin again
         }
      }
   }
}
 
 
int Z_counter(int* y,int m,int* t)      //counting numbers,that in Y array after sorting didnt changed a place
{
   int count=0;
   for(int i=0;i<m;i++)
      if(*(y+i)==*(t+i))
         count++;
   return count;      //return result
}
 
 
void T_inp(int* y,int m,int* t)         //copy all Y arrays elements to T
{
   for(int i=0;i<m;i++)
      *(t+i)=*(y+i);
}
 
void Z_inp(int* y,int m,int* t,int* z)      //input that elemnt,that after sorting of Y arry didnt changed his place
{
   int j=0;
   for(int i=0;i<m;i++)
      if(*(y+i)==*(t+i))
         *(z+j++)=*(y+i);
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2011, 00:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оцените код сортировки массива (C++):

Исправить код сортировки массива - C++
Добрый вечер) Обращаюсь к вам за помощью. Есть программа, которая должна сортировать массив, а также выводить соответствующие данные из...

Код пузырьковой сортировки массива по убыванию - C++
Исходный массив -2.4 10.5 49.9 -49.9 -25.3 35.8 Написать код пузырьковой сортировки данного массива на убывание

Исправить код для сортировки двумерного массива - C++
Здравствуйте! Укажите пожалуйста на мою ошибку. Нужно через быструю сортировку отсортировать двумерный массив, но что бы сортировались...

Пример быстрой сортировки массива строк и сортировки методом выбора - C++
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк методом выбора. Очень срочно надо,...

Оцените код - C++
Суть задания: дана непрямоугольная матрица(в каждой строке разное кол-во элементов). Необходимо вывести в другую строку число уникальных...

Исправить код сортировки выбором - C++
Реализуйте алгоритм на языке Си, добавив в программу подсчет количества сравнений и перестановок, проведенных алгоритмом. Выполните...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
05.03.2011, 15:04     Оцените код сортировки массива
  #16

Не по теме:

Saiberg, си придумали до страуструпа, и оба этих языка неравноценны
в си нет ни шаблонов ни классов, то что уж извините - вектор не попрет

0
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
05.03.2011, 15:07 #17
причем здесь вектор ?

*(buff + i) хуже чем buff[i]

и где есть возможность лучше писать buff[i]

сори, я немного не вьехал в суть вопроса. твоя правда
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
05.03.2011, 19:28  [ТС] #18
Цитата Сообщение от Kastaneda Посмотреть сообщение
Тоже удивило, а препод про индексацию указателей слышал? Или это намек на какой-то стиль программирования, который рекомендуется к использованию в принудительном порядке?
ну наверное.

Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
А у вас используется везде. Где не нужно абсолютно это.
хм..а где нужно?

ну не надо его послать все тут вижу хотят послать его)))может надо чтобы мы и про это знали...может вполне возможно,через пару недель будем писать как всегда.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.03.2011, 19:40 #19
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
хм..а где нужно?
мне, например, больше нравится второй вариант (в copy), хотя смысл опять же тот же
C++
1
2
3
4
5
6
7
    const size_t size = 5;
 
    // ...
 
    int data[size];
    std::generate (data, &data[size], rand);
    std::copy (data, data + size, std::ostream_iterator<int>(std::cout, " "));
0
alex_x_x
05.03.2011, 19:44
  #20

Не по теме:

опять крепчает маразм
неужто лучше научить стлу людей, которые с указателями толком работать не умеют?

0
ForEveR
05.03.2011, 19:47
  #21

Не по теме:

alex_x_x, Ну с копи тут явно перебор. Но использовать везде арифметику указателей в С++ - маразматично несколько. Достаточно в паре мест использовать, если нужно узнать.

0
alex_x_x
05.03.2011, 19:52
  #22

Не по теме:

ForEveR, так не учат в универах сперва си, потом с++, все дается вместе, поэтому такие лабы
цель лабы по-максимуму обучить действиям с указателями

1
^Tecktonik_KiLLeR
06.03.2011, 00:02  [ТС]
  #23

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
сперва си, потом с++
нам сказали с 1 сентября что мы будем сперва учить язык Си...вот смотрю на доску, вижу cout...хм,может я что то не правильно расслышал,либо что то не хорошо знаю. подумал я

0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
06.03.2011, 11:32 #24
^Tecktonik_KiLLeR, потому что преподы очень часто смешивают Си и Си++, что не есть хорошо. Правда такова: хорошие программисты идут работать программистами, а не очень хорошие идут в преподавание. В нашей стране такой вот хреновый подход. За границей такой фигни не происходит, у них чаще всего преподаватели в вузах - мастера своего дела...
2
ForEveR
06.03.2011, 14:31
  #25

Не по теме:

silent_1991, Согласен. Если там Страуструп преподает - это что-то да значит.

0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
06.03.2011, 16:55  [ТС] #26
silent_1991, я не из России
0
silent_1991
06.03.2011, 17:08     Оцените код сортировки массива
  #27

Не по теме:

^Tecktonik_KiLLeR, ну это всё меняет, вам просто с преподом не повезло, ага...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2011, 17:08
Привет! Вот еще темы с ответами:

Не могу понять код пузырьковой сортировки - C++
Сам алгоритм работы ясен, а как это воплотить в код не могу понять. Если читать готовые коды, тоже не могу разобраться.

Как исправить данный код сортировки? - C++
Вот только не надо никаких анализов, вопросов, и т. д. Конкретно мой пример. Программа на некоторых компиляторах не компилируется....

Исправить код, реализующий алгоритм сортировки - C++
Доброе утро. Сделал попытку реализовать функцию сортировки простым двухпутевым слиянием, но не вышло. При запуске происходит ошибка,...

Составить программу сортировки одномерного числового массива от начала массива к элементу с заданным номером по убыванию (методом выбора) - C++
Помогите составить программу на С++. Заданный номер - 28.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.03.2011, 17:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru