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

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

Войти
Регистрация
Восстановить пароль
 
Vredinka_6
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 32
#1

проще и короче - C++

09.03.2012, 14:18. Просмотров 657. Ответов 10
Метки нет (Все метки)

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
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <math.h>
 
using namespace std;
 
/*
Динамическое выделение памяти, каждый пункт ф-ция, данные- через пар-ры, глобал.переменные - не допускаются.
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество отриц. элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по
   модулю элемента.
3) Заменить все отриц. элементы массива их квадратами.
4) Упорядочить элементы массива по возрастанию.
*/
 
#define n 10 // длина массива
 
// Заполнение массива случайными значениями
void MakeArray(double *X)
{
  for (int Index = 0; Index != n; Index++)
    X[Index] = (double)(rand() - rand()) / 0xfc;
}
 
// Подсчёт отрицательных элементов массива
unsigned GetNegativeCount(double *X)
{
  unsigned Count = 0;
  for (int Index = 0; Index != n; Index++)
    if (X[Index] < 0) Count++;
  return Count;
}
 
// Вычисление суммы модулей элементов массива,
// расположенных после минимального по модулю элемента.
double GetSum(double *X, unsigned *MinIndex)
{
  double Min = fabs(X[0]), Sum = 0.0;
  *MinIndex = 0;
 
  for (int Index = 1; Index != n; Index++)
    if (fabs(X[Index]) < Min)
    {
      Min = fabs(X[Index]);
      *MinIndex = Index;
    }
 
  for (int Index = 0; Index != *MinIndex; Index++)
    Sum += fabs(X[Index]);
 
  return Sum;
}
 
// Замена все отриц. элементы массива их квадратами.
void NegativeToSquare(double *X)
{
  for (int Index = 0; Index != n; Index++)
    if (X[Index] < 0)
      X[Index] *= X[Index];
}
 
// Сортировка по возрастанию
void Sort(double *X)
{
  double Temp;
 
  for (int Index1 = 0; Index1 != n; Index1++)
    for (int Index2 = Index1; Index2 != n; Index2++)
      if (X[Index1] > X[Index2])
      {
        Temp = X[Index1];
        X[Index1] = X[Index2];
        X[Index2] = Temp;
      }
}
 
// Вывод массива на консоль
void OutArray(double *X)
{
  for (int Index = 0; Index != n; Index++)
    printf("  %0.2f", X[Index]);
  printf("\n");
}
 
int main(int argc, char *argv[])
{
  double X[n]; // массив из n элементов
  double Sum;  // сумма модулей элементов массива,
               // расположенных после минимального по модулю элемента.
  unsigned MinIndex; // номер элемента, минимального по модулю
 
  MakeArray(X);
 
  printf("Source array:\n");
  OutArray(X);
 
  printf("\nNegative items: %d\n", GetNegativeCount(X));
 
  Sum = GetSum(X, &MinIndex);
  printf("\nSum of absolute values before absolute minimum (%0.2f): %0.2f\n", X[MinIndex], Sum);
  printf("\nAfter changes negative items to it's squares:\n");
  NegativeToSquare(X);
  OutArray(X);
 
  printf("\nArray after sorting:\n");
  Sort(X);
  OutArray(X);
 
  printf("\n\n");
  system("PAUSE");
  return EXIT_SUCCESS;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2012, 14:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос проще и короче (C++):

А+Б на АСМП, как написать короче? - C++
#include&lt;fstream&gt; main(){ int a,b; std::ifstream i(&quot;input.txt&quot;); std::ofstream o(&quot;output.txt&quot;); i&gt;&gt;a&gt;&gt;b; ...

Можно ли данный код сделать короче? - C++
#include&lt;iostream&gt; #include&lt;iomanip&gt; int main() { int r,f,a,b,c,d,x,y; cout&lt;&lt;&quot;Vvedite znachenie r:&quot;; cin&gt;&gt;r; ...

определить количество слов, короче 5 символов - C++
определить количество слов, короче 5 символов помогите сделать

Задача со switch. Как сделать короче? - C++
Доброго вечера. Решаю задачник по программированию и набрел на такую задачу:Сделать эту задачу необходимо по условию с помощью switch.(Все...

Как еще короче записать данный код? - C++
#include &lt;ios&gt; main() { system(&quot;for /f \&quot;tokens=1,2,3\&quot; %a in (input.txt) do set /a %a*%b*%c*2 &gt;output.txt&quot;); } подсказка...

Функция, которая возвращает слово в строке, которое короче всех. - C++
Добрый день уважаемые программисты! Есть задание: Написать функцию, которая возвращает слово в строке, которое короче всех. Заголовок...

10
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.03.2012, 14:22 #2
и где вопрос?
0
Vredinka_6
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 32
09.03.2012, 14:30  [ТС] #3
нужно короче и проще
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.03.2012, 14:33 #4
Написано относительно хорошо. все разбито на функции и main как раз таки простой и понятный. Сами функции тоже простые и понятные. Имплемент функций конечно же можно поменять так, чтобы вместо самодельных проходов по массиву использовались алгоритмы и прочее, но это наверно лишнее.
0
Vredinka_6
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 32
09.03.2012, 14:42  [ТС] #5
а проще можно как то написать?
0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
09.03.2012, 14:44 #6
Vredinka_6, я так понимаю писали не вы?)
Проще здесь уже практически некуда.
0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
09.03.2012, 14:54 #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
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
#include "iostream"
#include "ctime"
#include "cmath"
#include <iomanip>
 
using namespace std;
 
int main()
{
        setlocale(0,"");
        srand(time(0));
        double n, mas[100] = {0}, sum = 0, min, mini;
        int Count = 0;
 
        cout << "Введите количество элементов в массиве - ";
        cin >> n;
        cout << "\nСгенерированный массив:\n\n";
        
        for(int i = 0; i < n; i++)
        {
                mas[i] = (50)*(double)rand() / RAND_MAX - 25;
                cout <<  fixed << setprecision(2) << mas[i] << " "; 
        }
 
        min = mas[0];
        for(int i = 0; i < n; i++)
        {
                if(mas[i] < 0)
                {
                        Count++;
                }
 
                if( abs(mas[i]) < abs(min) )
                {
                        min = mas[i];
                        mini = i;
                }
        }
 
        
        for(int i = mini + 1; i < n; i++)
        {
                sum += mas[i];
        }
 
        cout << "\n\nКоличество отрицательных элементов в массиве - " << Count;
        cout << "\n\nМинимальный по модулю элемент массива - " << min;
        cout << "\n\nСумму модулей элементов,расположенных после минимального по модулю элемента " << sum;
 
        cout << "\n\nМассив после замены отрицательных элементов их квадратами:\n\n";
        for(int i = 0; i < n; i++)
        {
                if(mas[i] < 0)
                {
                        mas[i] = mas[i] * mas[i];
                }
                cout <<  fixed << setprecision(2) << mas[i] << " ";
        }
 
        cout << "\n\nМассив упорядоченный по возрастанию:\n\n";
        for(int i = 0; i < n; i++)
        {
       for(int j = n - 1; j > i; j--)
           {
          if (mas[j-1] > mas[j])  
           {
              double x = mas[j-1]; 
              mas[j-1] = mas[j]; 
              mas[j] = x;
           }
           }
        }
 
        for(int i = 0; i < n; i++) 
        {
                cout << mas[i] << " "; //выводим массив после сортировки
        }
 
        system("pause >> null");
        return 0;
}
0
Vredinka_6
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 32
09.03.2012, 15:15  [ТС] #8
оно то проще, но надо с динамическим выделением памяти, каждый пункт ф-ция, данные- через пар-ры, глобал.переменные - не допускаются.
0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
09.03.2012, 15:22 #9
Цитата Сообщение от Vredinka_6 Посмотреть сообщение
надо
Вам же надо? Пробуйте переделать пример как Вам надо! что не получиться пишите, поможем!
0
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 444
09.03.2012, 18:14 #10
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
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <numeric>
using namespace std;
 
/*
Динамическое выделение памяти, каждый пункт ф-ция, данные- через пар-ры, глобал.переменные - не допускаются.
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество отриц. элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по
   модулю элемента.
3) Заменить все отриц. элементы массива их квадратами.
4) Упорядочить элементы массива по возрастанию.
*/
 
#define n 10 // длина массива
 
// Заполнение массива случайными значениями
void MakeArray(double *X)
{
    for (int Index = 0; Index != n; Index++)
        X[Index] = (double)(rand() - rand()) / 0xfc;
}
 
// Подсчёт отрицательных элементов массива
unsigned GetNegativeCount(double *X)
{
    unsigned Count = 0;
    for (int Index = 0; Index != n; Count += X[Index++] < 0) { }
    return Count;
}
 
// Вычисление суммы модулей элементов массива,
// расположенных после минимального по модулю элемента.
bool absLess(double a, double b)
{
    return abs(a) < abs(b);
}
double absSum(double a, double b)
{
    return a + abs(b);
}
double GetSum(double *X, unsigned *MinIndex)
{
    *MinIndex = std::min_element(X, X + n, absLess ) - X;
    return std::accumulate(X + *MinIndex, X + n, 0., absSum);
}
 
// Замена все отриц. элементы массива их квадратами.
void NegativeToSquare(double *X)
{
    for (int Index = 0; Index != n; Index++)
        X[Index] *= X[Index] < 0 ? X[Index] : 1;
}
 
// Сортировка по возрастанию
void Sort(double *X)
{
    std::sort(X, X + n);
}
 
// Вывод массива на консоль
void OutArray(double *X)
{
    for (int Index = 0; Index != n; Index++)
        printf("  %0.2f", X[Index]);
    printf("\n");
}
 
int main(int argc, char *argv[])
{
  double X[n]; // массив из n элементов
  double Sum;  // сумма модулей элементов массива,
               // расположенных после минимального по модулю элемента.
  unsigned MinIndex; // номер элемента, минимального по модулю
 
  MakeArray(X);
 
  printf("Source array:\n");
  OutArray(X);
 
  printf("\nNegative items: %d\n", GetNegativeCount(X));
 
  Sum = GetSum(X, &MinIndex);
  printf("\nSum of absolute values before absolute minimum (%0.2f): %0.2f\n", X[MinIndex], Sum);
  printf("\nAfter changes negative items to it's squares:\n");
  NegativeToSquare(X);
  OutArray(X);
 
  printf("\nArray after sorting:\n");
  Sort(X);
  OutArray(X);
 
  printf("\n\n");
  system("PAUSE");
  return EXIT_SUCCESS;
}
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.03.2012, 19:53 #11
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
#include <iostream>
#include <algorithm>
#include <numeric>
#include <iterator>
#include <functional>
#include <iomanip>
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
/*
Динамическое выделение памяти, каждый пункт ф-ция, данные- через пар-ры, глобал.переменные - не допускаются.
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество отриц. элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по
   модулю элемента.
3) Заменить все отриц. элементы массива их квадратами.
4) Упорядочить элементы массива по возрастанию.
*/
 
#define n 10 // длина массива
 
// Заполнение массива случайными значениями
void MakeArray(double *X)
{
    for (int i = 0; i - n; )
        X[i++] = (double) ( rand() - rand() ) / 0xfc;
}
 
// Подсчёт отрицательных элементов массива
unsigned GetNegativeCount(double *X)
{
        return std::count_if( X, X + n, std::bind2nd( std::less< double > (), 0 ) );
}
 
// Вычисление суммы модулей элементов массива,
// расположенных после минимального по модулю элемента.
double GetSum(double *X, unsigned *MinIndex)
{
        *MinIndex = std::distance(X, std::min_element(X, X + n, [] (int a, int b) { return fabs(a) < fabs(b); } ) );
        return std::accumulate( X + *MinIndex + 1, X + n, 0, [] ( int total, int z ) { return total + fabs(z); } );
}
 
// Замена все отриц. элементы массива их квадратами.
void NegativeToSquare(double *X)
{
  std::transform(X, X + n, X, [] (double a) { return a < 0 ? a * a : a;  } );
}
 
// Сортировка по возрастанию
void Sort(double *X)
{
        std::sort(X, X + n);
}
 
// Вывод массива на консоль
void OutArray(double *X)
{
  std::cout << std::fixed << std::setprecision(2);
  std::copy( X, X + n, std::ostream_iterator< double > (std::cout, " ") );
}
 
int main(int argc, char *argv[])
{
  double X[n]; // массив из n элементов
  double Sum;  // сумма модулей элементов массива,
               // расположенных после минимального по модулю элемента.
  unsigned MinIndex; // номер элемента, минимального по модулю
 
  MakeArray(X);
 
  printf("Source array:\n");
  OutArray(X);
 
  printf("\nNegative items: %d\n", GetNegativeCount(X));
 
 
  Sum = GetSum(X, &MinIndex);
 
  printf("\nSum of absolute values before absolute minimum (%0.2f): %0.2f\n", X[MinIndex], Sum);
  printf("\nAfter changes negative items to it's squares:\n");
        
  NegativeToSquare(X);
  OutArray(X);
 
  printf("\nArray after sorting:\n");
  Sort(X);
  OutArray(X);
 
  printf("\n\n");
  system("PAUSE");
  return EXIT_SUCCESS;
  
}
Там, кстати, во втором пункте ошибка - находится сумма элементов до минимального, а нужно после минимального.
0
09.03.2012, 19:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2012, 19:53
Привет! Вот еще темы с ответами:

Написать функцию, которая возвращает слово в строке, которое короче всех - C++
Задание: Написать функцию, которая возвращает слово в строке, которое короче всех. Заголовок функции: char * mostlyWord (const char * s );...

Исключить все слова короче 4-х букв; напечатать полученное предложение и число исключенных слов - C++
В заданном предположении исключить все слова короче 4-х букв. Напечатать полученное предложение и число исключенных слов. при реализации...

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

Ввести текст, который состоит из нескольких слов. Слова, которые короче 6 символов дополнить хэштегом в конце - C++
Помогите, пожалуйста, не понимаю как это сделать


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

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

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