0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 12
1

Помогите разобрать чужой код

10.12.2015, 20:55. Показов 5679. Ответов 18
Метки нет (Все метки)

нам дали задание понять, что собственно написано в коде.
Может кто подскажет как легче читать чужой код.
Вот тот самый кусок кода, который мне надо разобрать. Помогите новичку!
C++
1
2
3
4
5
6
7
8
9
int F7(int c[], int n)
{ int i,j,m,s;
for (s=0, i=0; i < n-1; i++)
    {
    for (j=i+1, m=0; j<n; j++)
        if (c[i]==c[j]) m++;
    if (m > s) s = m;
    }
return s; }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2015, 20:55
Ответы с готовыми решениями:

учусь разбирать чужой код
что делает эта функция? static unsigned long foo (char *w) { int c; unsigned long u = 0;...

Как научиться эффективно читать чужой код С++
Поделитесь пожалуйста опытом или просто мыслями о том, как всё таки начать разбираться в не своём...

Новичок. Прошу "бывалых" разобрать код подетально, код писал сам (рабочий)
Этот код моя первая самостоятельная работа. Писал его опираясь на уроки из интернета. Однако там...

Разобрать код
В общем писал код для выявление слов в которых есть буква 'K', и вывод их на экран, все работает,...

18
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
10.12.2015, 20:59 2
Dreqgan, это самописный метод, который принимает в себя массив интов и переменную типа инт, производит действия, и возвращает значения типа инт!
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
10.12.2015, 21:06 3
Максимальное количество повторов?
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
10.12.2015, 21:07 4
Цитата Сообщение от nmcf Посмотреть сообщение
Максимальное количество повторов?
хз, без тегов даже всматриваться не хочу, сижу с мобилы просто
0
Эксперт CЭксперт С++
5087 / 2272 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
10.12.2015, 21:17 5
Dreqgan, за такое форматирование кода надо бить. Ногами. Собственно, как и за сам код. Так автору кода и скажите.
Вот Вам код в более пристойном виде (в плане форматирования):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int F7(int c[], int n)
{
    int i, j, m, s;
    for (s=0, i=0; i < n-1; i++)
    {
        for (j=i+1, m=0; j<n; j++)
        {
            if (c[i]==c[j])
                m++;
            if (m > s)
                s = m;
        }
    }
    return s;
}
Это код самописной (самодельной) функции по имени F7, которая возвращает целое значение (тот самый int в начале кода) и принимает в качестве аргументов указатель на начало массива c целых чисел (первый параметр) и размер массива n (второй параметр). Функция (по задумке) считает количество одинаковых элементов в массиве. На деле же, выполняет она это довольно хреново. Пруф:
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
#include <iostream>
 
int F7(int c[], int n)
{
    int i, j, m, s;
    for (s=0, i=0; i < n-1; i++)
    {
        for (j=i+1, m=0; j<n; j++)
        {
            if (c[i]==c[j])
                m++;
            if (m > s)
                s = m;
        }
    }
    return s;
}
 
int main()
{
    const int SOME_NUMBER = 4;
    const int ARR_SIZE = 8;
 
    int * arr = new int[ARR_SIZE];
    for (int i=0; i < ARR_SIZE; i++)
    {
        if (i%2)
            arr[i] = i + 1;
        else
            arr[i] = SOME_NUMBER;
    }
 
    for (int i=0; i < ARR_SIZE; i++)
        std::cout << arr[i] << " ";
 
    std::cout << "\n\nThe amount of equal elements is: " << F7(arr, ARR_SIZE);
 
    delete [] arr;
 
    return 0;
}
Миниатюры
Помогите разобрать чужой код  
0
4814 / 2275 / 287
Регистрация: 01.03.2013
Сообщений: 5,933
Записей в блоге: 26
11.12.2015, 00:00 6
gru74ik, форматирование конечно хреновое, ты прав, надо было однострочником. А считает она конечно неоптимально, но нормально - если представить, что возвращает она максимальное количество дублей. У тебя 5 четверок в массиве - 4 дубля
1
S_el
11.12.2015, 00:02
  #7

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Так автору кода и скажите.
А еще автору кода надо сказать про STL и C++11,C++14 :)

0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,060
Записей в блоге: 1
11.12.2015, 01:54 8
Цитата Сообщение от gru74ik Посмотреть сообщение
На деле же, выполняет она это довольно хреново.
А какой код не хреновый?
0
Эксперт CЭксперт С++
5087 / 2272 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
11.12.2015, 09:25 9
Цитата Сообщение от _Ivana Посмотреть сообщение
А считает она конечно неоптимально, но нормально - если представить, что возвращает она максимальное количество дублей.
ОК, ногами отменяется. И вообще битьё. Подзатыльник за форматирование кода.

Добавлено через 2 часа 47 минут
Цитата Сообщение от zer0mail Посмотреть сообщение
А какой код не хреновый?
По пунктам?
  1. С нормальными именами функций.
  2. С нормальными именами параметров функций.
  3. С нормальными именами переменных.
  4. С нормальным форматированием кода (форматирование кода в примере от ТС - уёжищное).
  5. Без велосипедов, с использованием STL и текущего стандарта.
  6. С использованием const, где это необходимо.

Например, так:
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
#include <iostream>
#include <set>
 
int count_equal_elements(int arr[], int arr_size)
{
    std::set<int> temp(arr, arr + arr_size);
    return ( arr_size - temp.size() ) + 1 ;
}
 
int main()
{
    const int SOME_NUMBER = 4;
    const int ARR_SIZE = 8;
 
    int * arr = new int[ARR_SIZE];
    for (int i=0; i < ARR_SIZE; i++)
    {
        if (i%2)
            arr[i] = i + 1;
        else
            arr[i] = SOME_NUMBER;
    }
 
    for (int i=0; i < ARR_SIZE; i++)
        std::cout << arr[i] << " ";
 
    std::cout << "\n\nThe amount of equal elements is: "
              << count_equal_elements(arr, ARR_SIZE);
 
    delete [] arr;
 
    return 0;
}
0
_Ivana
11.12.2015, 09:35
  #10

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
По пунктам
Я как специально под эти пункты последнего кота писал Найти количество всевозможных маршрутов от города до города :) Привожу не холивара ради а просто совпало удачно так. Хотя const я не против понасовать почти везде :)

0
Эксперт CЭксперт С++
5087 / 2272 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
11.12.2015, 10:00 11
Блин, про const сказал, а сам забыл. Подзатыльник мне тоже. Вот:

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
#include <iostream>
#include <set>
 
int count_equal_elements(const int arr[], const int arr_size)
{
    std::set<int> temp(arr, arr + arr_size);
    return arr_size - temp.size() + 1 ;
}
 
int main()
{
    const int SOME_NUMBER = 4;
    const int ARR_SIZE = 8;
 
    int * arr = new int[ARR_SIZE];
    for (int i=0; i < ARR_SIZE; i++)
    {
        if (i%2)
            arr[i] = i;
        else
            arr[i] = SOME_NUMBER;
    }
 
    for (int i=0; i < ARR_SIZE; i++)
        std::cout << arr[i] << " ";
 
    std::cout << "\n\nThe amount of equal elements is: "
              << count_equal_elements(arr, ARR_SIZE);
 
    delete [] arr;
 
    return 0;
}
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
11.12.2015, 10:27 12
gru74ik, слушай, вопрос не по теме конечно, но всеже, какой смыслал передавать в метод переменную типа const? Видел по сути ей до фонаря, или я не прав?
0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,060
Записей в блоге: 1
11.12.2015, 10:51 13
Цитата Сообщение от gru74ik Посмотреть сообщение
По пунктам?
С нормальными именами функций.
С нормальными именами параметров функций.
С нормальными именами переменных.
С нормальным форматированием кода (форматирование кода в примере от ТС - уёжищное).
Без велосипедов, с использованием STL и текущего стандарта.
С использованием const, где это необходимо.
Имхо, не хватает одного пункта, самого главного:
7. Код должен правильно выполнять поставленную задачу.

Ваш пример отработает неверно на данных: 1,1,2,2,3,3,3
2
Mesteriis
11.12.2015, 10:54
  #14

Не по теме:

zer0mail, к черту правильность, мы эстеты )))

0
Эксперт CЭксперт С++
5087 / 2272 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
11.12.2015, 11:04 15
Цитата Сообщение от Mesteriis Посмотреть сообщение
какой смыслал передавать в метод переменную типа const?
Есть такая штука "граммар const". Это он.

Цитата Сообщение от zer0mail Посмотреть сообщение
Ваш пример отработает неверно на данных: 1,1,2,2,3,3,3
Хых, а и правда. Благодарю за наблюдательность. Ща поправлю.
0
3753 / 3073 / 850
Регистрация: 25.03.2012
Сообщений: 11,367
Записей в блоге: 1
11.12.2015, 13:14 16
Цитата Сообщение от Mesteriis Посмотреть сообщение
zer0mail, к черту правильность, мы эстеты )))
при чём тут эстеты/неэстеты? Тебе нравится смотреть на быдлокод кого-нибудь вроде _Ivana? Он специально прикидывается непонимающим, а на деле он намеренно обфусцирует любой код, который выдаёт. Он ненавидит новичков и хочет над ними издеваться.
0
Эксперт CЭксперт С++
5087 / 2272 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
12.12.2015, 13:43 17
Цитата Сообщение от gru74ik Посмотреть сообщение
Ща поправлю.
Мда, быстро не получается.
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 12
12.12.2015, 15:23  [ТС] 18
Спасибо за мнение)
0
Dimension
589 / 457 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
12.12.2015, 15:52 19
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
#include <bits/stdc++.h>
using namespace std;
int f(int *a, int s) {
    sort(a, a + s);
    int ans=0, t = 0;
    for (int i = 1;i < s;i++) {
        while (i < s && a[i] == a[i - 1])
            t++,i++;
        ans = max(ans, t);
        t = 0;
    }
    return ans+1;
}
int main() {
    srand(time(0));
    const int s = 10;
    int a[s];
    for (int i = 0;i < s;i++)
        a[i] = rand() % 15, cout << a[i] << " ";
    cout << endl;
    cout << f(a, s);
    cin.get(), cin.get();
    return 0;
}
Добавлено через 7 минут
либо так ,если время важнее памяти и числа не очень большие и не отрицательные
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
#include <bits/stdc++.h>
using namespace std;
int f(int *a, int s,int m) {
    int ans = 0;
    vector<int> counter(m + 1);
    for (int i = 0;i < s;i++) {
        counter[a[i]]++;
        ans = max(ans, counter[a[i]]);
    }
    return ans;
}
int main() {
    srand(time(0));
    const int s = 10;
    int a[s],MaxN=0;
    for (int i = 0;i < s;i++) {
        a[i] = rand() % 15;
        cout << a[i] << " ";
        MaxN = max(MaxN, a[i]);
    }
    cout << endl;
    cout << f(a, s,MaxN);
    cin.get(), cin.get();
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2015, 15:52
Помогаю со студенческими работами здесь

Разобрать код с++
Всем доброго времени суток. Дело такое нужно разобрать код явных ошибок нету но при компиляции...

Разобрать код на с++
Всем доброго времени суток. Не подскажите в чём у меня ошибка. В общем задание такое я должен...

Разобрать код
Помогите пожулйста розобрать код програми struct node { int item; node* next; { item = x; next...

Разобрать код
Помогите разобраться с кодом!Можите рассписать где что находится пожалуйста! #include &quot;stdafx.h&quot;...

Разобрать код
Всем привет помогите разобрать код, программа создана для подсчета что вот это вот означает? ...

Список (разобрать код)
Помогите пожалуйста разобрать код. #include &lt;list&gt; #include &lt;iterator&gt; #include &lt;cstdlib&gt;...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru