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

Упрощаем код и вносим замечания - C++

Восстановить пароль Регистрация
 
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
10.03.2011, 22:03     Упрощаем код и вносим замечания #1
Задание:
Дана последовательность из 100 различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальными числами (в сумму включить оба этих числа)
Рабочий вариант кода:
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
#define Max_Size 20
 
int main()
{
    int MassivOfNumber[Max_Size];
    int Min, Max, Summ;
    unsigned int i,j,k,temp;
    MassivOfNumber[0] = rand()%101 - 50;
    Max = Min = MassivOfNumber[0];
    Summ = 0;
    for (i=1; i<Max_Size; printf("%d ", MassivOfNumber[i]), ++i)
    {
        MassivOfNumber[i] = rand()%101 - 50;
        if (MassivOfNumber[i]>Max)
        {
            Max = MassivOfNumber[i];
            j = i;
        }
        if (MassivOfNumber[i]<Min)
        {
            Min = MassivOfNumber[i];
            k = i;
        }
    }
    printf("\nMax - %d, number of max - %d\nMin - %d, number of min - %d", Max, j, Min, k);
    if (k>j)
    {
        temp = j;
        j = k;
        k = temp;
    }
    for (k ; k<j+1; Summ+=MassivOfNumber[k], ++k);
    printf("\n%d", Summ);
    getch();
    return 0;
}

Прога работает без проблем.
Как можно реализовать ту же самую задачу, допустим, сократив число переменных, или кол-во кода..
Ну и вообще как можно сократить все это дело)
Слушаю ваши советы и комментарии)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2011, 22:03     Упрощаем код и вносим замечания
Посмотрите здесь:

Visual c++ код перевести в gcc linux код C++
C++ Не получается запустить длинный код Алгоритма Гомори, код правильный.
Код написан в Dev C. Не работает в Visual. Как нужно переделать код? C++
код, который прекрасно выполняет Code::Blocks не выполняеться в Студии, как сделатьь так чтобы Студия воспринимала этот код?? C++
перевод десятичного вещественного в машинный код(двоичный код) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
10.03.2011, 22:22     Упрощаем код и вносим замечания #2
Цитата Сообщение от DiabloRossi Посмотреть сообщение
100 различных целых чисел
Цитата Сообщение от DiabloRossi Посмотреть сообщение
Max_Size 20
это как???

Цитата Сообщение от DiabloRossi Посмотреть сообщение
Summ+=MassivOfNumber[k], ++k
можно так
Summ+=MassivOfNumber[k++]

Цитата Сообщение от DiabloRossi Посмотреть сообщение
printf("%d ", MassivOfNumber[i]), ++i
тоже самое
хотя я бы вынес
printf в тело цикла более читабельно и логично

Цитата Сообщение от DiabloRossi Посмотреть сообщение
k<j+1
k<=j

Добавлено через 5 минут
Цитата Сообщение от DiabloRossi Посмотреть сообщение
MassivOfNumber[0] = rand()%101 - 50;
Max = Min = MassivOfNumber[0];
Max = Min =-50(я так понимаю минимальное значение)
MassivOfNumber[0] = rand()%101 - 50;
в тело цикла
Цитата Сообщение от DiabloRossi Посмотреть сообщение
for (i=1; i<Max_Size; printf("%d ", MassivOfNumber[i]), ++i)
а нулевую ячейку не печатаешь??
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
10.03.2011, 22:29  [ТС]     Упрощаем код и вносим замечания #3
Цитата Сообщение от ValeryS Посмотреть сообщение

Max = Min =-50(я так понимаю минимальное значение)
MassivOfNumber[0] = rand()%101 - 50;
в тело цикла
Вот это слегка не понял)


А с нулевой ячейкой и правда оплошал)
все остальное пофиксил, благодарю)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
10.03.2011, 23:03     Упрощаем код и вносим замечания #4
смотри в мин вводишь максимальное а в мах минимальные значения
цикл начинаешь не с 1 а с нуля
и в теле цикла инициализируешь все ячейки начиная с нулевой
поскольку мах самые малые значения
а мин самое большое
то при первой же проверке они инициализируются значением 0 ячейки

Добавлено через 34 секунды
Цитата Сообщение от DiabloRossi Посмотреть сообщение
Max = Min =-50
здесь я накосячил
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
11.03.2011, 14:22  [ТС]     Упрощаем код и вносим замечания #5
То, что цикл начинается с 1 я сегодня пофиксю)
Лучше подскажите кто-нить, почему rand()... выдает все время один и тотже рандом)
как сделать, чтобы рандомные числа были разными
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
11.03.2011, 14:38     Упрощаем код и вносим замечания #6
DiabloRossi, srand(unsigned(time(NULL))) + #include <time.h>
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
11.03.2011, 20:03  [ТС]     Упрощаем код и вносим замечания #7
Все спасибо, все пофиксил)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
11.03.2011, 22:20     Упрощаем код и вносим замечания #8
Цитата Сообщение от DiabloRossi Посмотреть сообщение
почему rand()... выдает все время один и тотже рандом)
потому что гладиолус
нет такой вещи в мире генератор случайных чисел!(любое число случайно)
нет и не может быть ! есть генератор случайных последовательностей чисел.
приведу пример как меня учили
1,2,3,4,5
какая вероятность что следующее число будет 6 ??????
так вот все генераторы ПСЕВДОслучайных чисел(последовательностей) в любых языках программирования берут изначальное число и генерят последовательность
она не предсказуема(почти что)там у каждого свой алгоритм (простейшее умножить число PI на какое-то число и выдать дробную часть, следующим числом будет результат)
и получается что изначальное число одно и тоже последовательность хоть и не предсказуемая но всегда одна и та же.
для этого и придумана инициализация начального числа генератора
для С это srand а для того чтобы каждый раз по разному инициализируем его time
согласись вероятность что программу запустят в одно и тоже время очень мала
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2011, 22:41     Упрощаем код и вносим замечания
Еще ссылки по теме:

Написать код для игры НИМ. проверьте пожалуйста тот ли это код C++
C++ задача(есть код программы, нужно объяснить её программный код. )
Перевести код программы Паскаля в код С++ C++

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.03.2011, 22:41     Упрощаем код и вносим замечания #9
Вот так еще можно.
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
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <vector>
#include <algorithm>
#include <numeric>
 
int RandomNumber() {
  return rand() % 101 - 50;
}
 
void Print(int value) {
  printf("%4d", value);
}
 
int main() {
  srand(time(NULL));
  std::vector<int> array(100);
  std::generate(array.begin(), array.end(), RandomNumber);
  std::for_each(array.begin(), array.end(), Print); printf("\n");
  std::vector<int>::iterator i, j;
  i = std::min_element(array.begin(), array.end());
  j = std::max_element(array.begin(), array.end());
  printf("Min: %d, max: %d.\n", *i, *j);
  if (i > j)
    std::swap(i, j);
  std::for_each(i, j, Print); printf("\n");
  int sum = std::accumulate(i, j, 0);
  printf("Sum %d\n", sum);
}
Yandex
Объявления
11.03.2011, 22:41     Упрощаем код и вносим замечания
Ответ Создать тему
Опции темы

Текущее время: 16:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru