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

Вычислить сумму элементов массива с нечетными номерами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Есть функция. Надо вернуть значение http://www.cyberforum.ru/cpp-beginners/thread1027484.html
void Function1( FILE *pFile, int **pb, int N, int M) { for (int i = 0; i < N; i++) { int max = -1; for (int j = 0; j < M; j++) if (pb < 0 && max == -1) max = j; else if (pb < 0) {
C++ Задача Коши для обыкновенного дифференциального уравнения Электронная схема во временном интервале описана задачей Коши. Нужно решить задачу Коши для системы дифференциальных уравнений, дающей узловые напряжения, как функции времени U(t) : dU/dt=-A*U+{C}^{-1}*I где A={C}^{-1}*G=0 -начальное условие to=0,Uo=0; \bar{U'}=-{C}^{-1}*G*\bar{U}+{C}^{-1}*\bar{I} где {U}_{t=0}=0 \bar{U'}=\begin{vmatrix} \ U '1 \\ \ U '2 \\ U'3 http://www.cyberforum.ru/cpp-beginners/thread1027483.html
C++ Задача с факториалом
Добрые люди. Помогите написать программу для решения задачи с факториалом. Звучит она так "Вычислить (2n)!" Программу надо писать в Console Wizard. Буду очень благодарен.
C++ Задача на структуры
Помогите пожалуйста! Составить программу.Начальные данные берутся из файла и вводятся вручную. Минимальное содержание 15 элементов. Составить программу данных о человеке. 1) Имя 2) Фамилия 3)Дата рождения 4) Место жительства Задание: Вывести на экран данные о пенсионерах (старше 62 лет) Буду очень благодарен любой помощи!
C++ Прокомментируйте код http://www.cyberforum.ru/cpp-beginners/thread1027469.html
#include <conio.h> #include <iostream> #include <stdlib.h> #include <time.h> #include <locale.h> using namespace std; struct knot { int value;
C++ Матрицы Написать программу которая выводит из столбца матрицы понижающиеся цифры (отрицательно) подробнее

Показать сообщение отдельно
olichka86
2 / 2 / 1
Регистрация: 29.10.2013
Сообщений: 80
01.07.2015, 16:46
Цитата Сообщение от newb_programmer Посмотреть сообщение
for (i=0;i<n;i++)
* * * * if ( (abs(arr[i]))<=1 ) {
* * * * * * for (j=i;j<n;j++)
* * * * * * * * arr[j]=arr[j+1];
* * * * * * arr[n-1]=0;
* * * * }
По-моему, Ваш код валится на массиве, где все элементы <=1. Сделала похожим образом, дала на тест 1 1 1 1 - результат 1 1 0 0. Надо думать дальше самой) Или я чего-то недосмотрела...

Добавлено через 12 минут
Или не все, а просто n первых элементов, которые автоматом "загоняются" в начало массива, и больше не перепроверяются на валидность...

Добавлено через 23 минуты
У меня работает такой вариант кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < m; m--) {
        for (int k = 0; k < m; k++) {
            if (*(resultArray + k) <= 1) {
                for (int j = k; j < n - 1; j++) {
                    int tmp = *(resultArray + j);
                    *(resultArray + j) = *(resultArray + j + 1);
                    *(resultArray + j + 1) = tmp;
                }
                *(resultArray + n - 1) = 0;
            }
        }
    }
Но меня тошнит от "простоты и эффективности" этого алгоритма (((((
Пожалуйста, может кто-нибудь посоветует что-нибудь более изящное?

Добавлено через 22 минуты
Последний вариант, который мне удалось придумать. Всего 2 прохода по массиву, зато куча вспомогательных элементов.

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
int* sortArray(int *arr, int n) {
    int *resultArray = new int[n];
    int *mask = new int[n];
 
    for (int i = 0; i < n; i++){
        if (*(arr + i) <= 1) {
            *(mask + i) = 1;
        }
    }
 
    int maskCounter = 0;
    int arrCounter = 0;
    for (int i = 0; i < n, maskCounter < n; i++, maskCounter++){
        if (*(mask + i) != 1) {
            *(resultArray + arrCounter) = *(arr + i);
            arrCounter++;
        }       
    }
 
    for (int i = arrCounter; i < n; i++) {
        *(resultArray + i) = 0;
    }
    
 
    return resultArray;
}
Добавлено через 1 минуту
Последний вариант, который мне удалось придумать. Всего 2 прохода по массиву, зато куча вспомогательных элементов.

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
int* sortArray(int *arr, int n) {
    int *resultArray = new int[n];
    int *mask = new int[n];
 
    for (int i = 0; i < n; i++){
        if (*(arr + i) <= 1) {
            *(mask + i) = 1;
        }
    }
 
    int maskCounter = 0;
    int arrCounter = 0;
    for (int i = 0; i < n, maskCounter < n; i++, maskCounter++){
        if (*(mask + i) != 1) {
            *(resultArray + arrCounter) = *(arr + i);
            arrCounter++;
        }       
    }
 
    for (int i = arrCounter; i < n; i++) {
        *(resultArray + i) = 0;
    }
    
        delete []mask;
    return resultArray;
}
Кстати, было бы интересно узнать, как мне освободить память из-под resultArray. Ведь удалить его я не могу, мне вернуть его надо, а после returna уже ничего не напишешь?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru