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

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

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

Оцените код - C++

05.03.2011, 00:40. Просмотров 1308. Ответов 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);
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2011, 00:40     Оцените код
Посмотрите здесь:

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

Многомерный массив значений, размерность которого возрастает. Оцените код - C++
Всем привет! 8-) У меня возникла задача, и я решил сначала придумать свой вариант ее решения, и уже затем, спрашивать совета у...

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

Оцените код "Змейки" - C++
Прошу добрых жителей форума оценить мою &quot;Змейку&quot;. Посоветуйте на данном примере, как не следует писать и как лучше. Если есть конкретные...

Оцените программу - C++
Не давно написал эту программу. Охота услышать ваше мнение. Может для не которых она покажется простой, как одноклеточная бактерия, но...

Оцените тетрис - C++
Написано коряво, но это первый блин. Мне бы очень хотелось его дошлифовать до красивого внешнего и внутреннего содержания. Если участники...

Оцените программу: Шахматы - C++
Я почти не учил раньше программирование, чуть в школе, чуть в универе (все знания сводились о знании о переменных и цыклах). А месяцев 9...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
05.03.2011, 00:44     Оцените код #2
Код как код, что тут оценивать ?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
05.03.2011, 00:51     Оцените код #3
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
#include <stdlib.h>
#include <time.h>
cstdlib
ctime
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
void main()
int main
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
cin>>n;
проверка на положительность и то что вообще чтото ввели
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
int* x=new int[n];
вижу new, нигде не вижу delete

Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
srand(time(0));
лучше отдельно в main выносить, иначе при повторном вызове случайный числа окажутся не такими уж и случайными


Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
cout<<*(Array+i)<<" ";
дело вкуса, нож Array[i] просто

+ нигде нет проверки на входные значения - это плохо
HIMen
4129 / 1378 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
05.03.2011, 01:23     Оцените код #4
1.
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
int n; //size of X array
C++
1
int xLength;
И ненужные комментарии исчезнут.
2. Что за функции inp и out? Функции должны выполнять однозначные действия и возвращать однозначный результат. Без всяких rand и выводов в потоки
3.
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
bool CheckForSym(int a);
int Z_counter(int* y,int m,int* t);
Привыкни давать названия функциям и переменным в одном стиле.
4. Нет ниодного delete
5. Что за цикл такой?
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
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
}
}
}
6. Про индексаторы слышал?
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
05.03.2011, 11:36  [ТС]     Оцените код #5
Цитата Сообщение от alex_x_x Посмотреть сообщение
cstdlib
ctime
я написал код как просил препод
Цитата Сообщение от alex_x_x Посмотреть сообщение
int main
а разница какая?
Цитата Сообщение от alex_x_x Посмотреть сообщение
проверка на положительность и то что вообще чтото ввели
?
Цитата Сообщение от alex_x_x Посмотреть сообщение
вижу new, нигде не вижу delete
оо всегда забываю,спасибо.
Цитата Сообщение от alex_x_x Посмотреть сообщение
дело вкуса, нож Array[i] просто
нам препод гоорит что когда имеем дело с указателями надо писать так...а когда статический массивы то array[i]
Цитата Сообщение от alex_x_x Посмотреть сообщение
+ нигде нет проверки на входные значения - это плохо
то есть?
Цитата Сообщение от alex_x_x Посмотреть сообщение
лучше отдельно в main выносить, иначе при повторном вызове случайный числа окажутся не такими уж и случайными
Цитата Сообщение от HIMen Посмотреть сообщение
2. Что за функции inp и out? Функции должны выполнять однозначные действия и возвращать однозначный результат. Без всяких rand и выводов в потоки
у меня случайный они всегда.оО. я вот думаю,что каждая функция должна делать только свое дело
Препод сказал с рандом сделать
Цитата Сообщение от HIMen Посмотреть сообщение
Привыкни давать названия функциям и переменным в одном стиле.
Спасибо,учту
Цитата Сообщение от HIMen Посмотреть сообщение
Что за цикл такой?
пузырьковая сортировка.
Цитата Сообщение от HIMen Посмотреть сообщение
6. Про индексаторы слышал?
индексаторы или индексы ?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.03.2011, 12:57     Оцените код #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
а разница какая?
Разница в том, что в стандарте описаны только две перегрузки функции main:
C++
1
2
int main();
int main(int argc, char *argv[]);
Как видите, никаких void.

Добавлено через 2 минуты
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
нам препод гоорит что когда имеем дело с указателями надо писать так...а когда статический массивы то array[i]
Такое ощущение, что препод просто выё...живается, больше ничего. Компилятор всегда разворачивает конструкцию array[index] в конструкцию *(array + index). Именно поэтому можно написать arr[3], а можно 3[arr], ибо от перестановки мест слагаемых...
Kastaneda
05.03.2011, 13:04
  #7

Не по теме:

Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
нам препод гоорит что когда имеем дело с указателями надо писать так...а когда статический массивы то array[i]
Тоже удивило, а препод про индексацию указателей слышал? Или это намек на какой-то стиль программирования, который рекомендуется к использованию в принудительном порядке?

silent_1991
05.03.2011, 13:06
  #8

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
Или это намек на какой-то стиль программирования, который рекомендуется к использованию в принудительном порядке?
Ага, типа void main()

alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
05.03.2011, 13:29     Оцените код #9
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
?
ну на предложение ввести размер введу -5, или 3.34, а может быть hello
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
у меня случайный они всегда.оО. я вот думаю,что каждая функция должна делать только свое дело
Препод сказал с рандом сделать
C++
1
2
3
4
5
6
7
8
9
10
11
#include <cstdlib>
#include <ctime>
#include <iostream>
 
int main()
{
   srand( time(0) );
   std::cout << rand() << std::endl;
   srand( time(0) );
   std::cout << rand() << std::endl;   
}
вы вызываете функцию с srand один раз, но вызови вы ее два раза - результат бы вас удивил

Добавлено через 1 минуту
связано это с тем, что srand вызывает инициализацию генератора псевдослучайных чисел, если инициализировать их с одним и тем же числом - моментом старта программы - последовательности будут одними и теми же
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
05.03.2011, 14:36     Оцените код #10
^Tecktonik_KiLLeR, Таки я советую послать препода далеко и надолго за то, что он заставляет использовать арифметику указателей (в доказательство того, что посыл верный - можно привести пару фраз из новой книги Страуструпа).

стр. 656 Глава 18 Векторы и массивы
К сожалению, не все серьезные ошибки, связанные с арифметикой указателей, легко обнаружить. Лучше всего просто избегать использования арифметики указателей.
А у вас используется везде. Где не нужно абсолютно это.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
05.03.2011, 14:44     Оцените код #11
ForEveR, а если ему придется писать на си?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
05.03.2011, 14:46     Оцените код #12
alex_x_x, Тогда есть резон использовать. Но ведь сейчас он пишет не на Си.
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
05.03.2011, 14:54     Оцените код #13
а в чем отличие ? помоему в этом плане с и с++ одинаковы.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
05.03.2011, 14:55     Оцените код #14
Saiberg, Т.к. Си все же больше низкоуровневый, в нем довольно часто использовалась и используется арифметика. Если я не ошибаюсь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2011, 14:58     Оцените код
Еще ссылки по теме:

Оцените качество кода - C++
Недавно начал усиленно изучать C++ и Qt и решил написать один более-менее практический пример, а именно чат бота. Пока сделал самый...

Оцените решение задачи - C++
Наткнулся тут на задание по программированию, от нечего делать решил его сделать на C++. Человеку его задали в университете, а я там...

Сортировка вставкой (оцените) - C++
Доброго времени суток! Прошу, оцените реализацию сортировки целочисленного массива методом вставки, есть ли какие-нибудь недостатки и...

Оцените мой Doodle Jump - C++
Написал клон всем известной игры Doodle Jump. Прошу оценить и дать советы. Реализованы основные функции. Пока нету поворота игрока( смотрит...

Оцените мой первый урок по С++ - C++
Тут вот недавно приспичило урок по С++ написать. Сделано, а вот понять что за зверек получился надо (я про вас). Стоит ли продолжать или я...


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

Или воспользуйтесь поиском по форуму:
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
05.03.2011, 14:58     Оцените код #15
так то так, но то , что пишет страуструп лучше решение для си и с++. мое мнение)
Yandex
Объявления
05.03.2011, 14:58     Оцените код
Ответ Создать тему
Опции темы

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