С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 24.11.2017
Сообщений: 13
1

Обмен значений двух переменных

15.12.2017, 17:35. Показов 1390. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ниже решение задачи (Задана целочисленная последовательность A = (a i), i = 1..n, n <= 100.* Вывести индексы последовательности в*том порядке, в*котором соответствующие им элементы образуют убывающую последовательность) в файле func.cpp есть закомментированный кусок кода. Если обмен значений элементов массива, используемый в коде заменить на закомментированный, программа работает некорректно(значения некоторых элементов становятся равными нулю)
Помогите разобраться, почему так происходит. Заранее спасибо каждому, кто дочитал до этого момента
header.h
C++
1
2
3
4
5
6
7
#pragma once
 
void fsort(int* arr, int* num, int first, int last);
void dinamicArr(int *& arr, int size);
void random(int* arr, int size);
void consistent(int* arr, int size);
void print(int *arr, int* arrnum, int size, bool a);
main.cpp
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
//Задана целочисленная последовательность A = (a i), i = 1..n, n <= 100.* Вывести
//индексы последовательности в*том порядке, в*котором соответствующие им
//элементы образуют убывающую последовательность.
#include <iostream>
#include "header.h"
using namespace std;
int main() {
    int N;
    cout << " Number of sequence elements [no more than 100] -> ";
    cin >> N;
    int* arr = NULL;
    int* num = NULL;
    dinamicArr(arr, N);
    dinamicArr(num, N);
    random(arr, N);
    consistent(num, N);
    print(arr, num, N, 1);
    cout << endl << endl;
    fsort(arr, num, 0, N-1);
    print(arr, num, N, 0);
 
    system("pause");
    return 0;
}
func.cpp
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
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
 
void fsort(int* arr, int* num, int first, int last) {
    int j = first, i = last;
    int rod = arr[((j + i) / 2)];
    int tmp;
    while (j <= i) {
        while (arr[j] > rod)
            j++;
        while (arr[i] < rod)
            i--;
        if (j <= i) {
            tmp = arr[j];
            arr[j] = arr[i];
            arr[i] = tmp;
            tmp = num[j];
            num[j] = num[i];
            num[i] = tmp;
            /*arr[j] += arr[i];
            arr[i] = arr[j] - arr[i];
            arr[j] -= arr[i];
            num[j] += num[i];
            num[i] = num[j] - num[i];
            num[j] -= num[i];*/
            j++;
            i--;
        }
    }
    if (i > first)
        fsort(arr, num, first, i);
    if (j < last)
        fsort(arr, num, j, last);
}
void dinamicArr(int *& arr, int size) {
    arr = new int[size];
}
void random(int * arr,int size) {
    srand(time(NULL));
    for (int i = 0; i < size; i++) {
        arr[i] = (rand() % 300 + 1);
    }
}
void consistent(int * arr, int size) {
    for (int i = 0; i < size; i++) arr[i] = i;
}
void print(int* arr, int* arrnum, int size, bool a) {
    for (int i = 0; i < size; i++) {
        if (a)
            cout << setw(3) << i << " element of sequence -> " << arr[i] << endl;
        else
            cout << setw(3) << i << " element of new sequence -> " << setw(3) << arr[i] << " | old number -> " << setw(3) << arrnum[i] << endl;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2017, 17:35
Ответы с готовыми решениями:

Обмен значениями двух переменных
Нашёл на другом форуме занятную формулу обмена значений двух переменных(очевидно на с++): b = – –a...

Определить процедуру, осуществляющую обмен значениями двух переменных
Составить программу, в результате которой величина а меняется значением с величиной b, а величина с...

Обмен значениями двух переменных А и В без использования вспомогательной переменной
Сконструировать алгоритм обмена значениями двух переменных А и В без использования вспомогательной...

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

8
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
15.12.2017, 17:49 2
Про переполнение что-нибудь слышали?
0
0 / 0 / 1
Регистрация: 24.11.2017
Сообщений: 13
15.12.2017, 20:34  [ТС] 3
Цитата Сообщение от jahdjkhasjdhjah Посмотреть сообщение
Про переполнение что-нибудь слышали?
Слышал, числа 300+300 вызывают разве?
0
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
15.12.2017, 21:35 4
Я не знаю, какие у вас числа. Это вам лучше знать.
Если у вас числа и вправду такие малые - тогда не вижу объективных причин в неработоспособности этого куска кода. Особенно, если кусок выше - рабочий. Магия. А вы - видимо, волшебник.
0
10 / 10 / 13
Регистрация: 27.09.2016
Сообщений: 248
15.12.2017, 22:15 5
C++
1
if (j < i)
1
0 / 0 / 1
Регистрация: 24.11.2017
Сообщений: 13
16.12.2017, 00:36  [ТС] 6
Цитата Сообщение от jahdjkhasjdhjah Посмотреть сообщение
Я не знаю, какие у вас числа. Это вам лучше знать.
Если у вас числа и вправду такие малые - тогда не вижу объективных причин в неработоспособности этого куска кода. Особенно, если кусок выше - рабочий. Магия. А вы - видимо, волшебник.
Вы бы лучше не злобно писали, какие у меня руки кривые, и так не бывает, что рабочий код не работает.
Человек ниже смог мне помочь, написав несколько символов. Вносите больше конструктива в свои посты.
0
10 / 10 / 13
Регистрация: 27.09.2016
Сообщений: 248
16.12.2017, 00:51 7
я уверен он и не писал злобно, на самом деле удивительно чего код работает с одной частью, но не с другой. хотя моя правка и помогла, я сильно не вглублювався в проблему, возможно неправильно прописан алгоритм сортировки, по желанию советую пройтись дебаггером
0
0 / 0 / 1
Регистрация: 24.11.2017
Сообщений: 13
16.12.2017, 00:57  [ТС] 8
Цитата Сообщение от GERALD2799 Посмотреть сообщение
я уверен он и не писал злобно, на самом деле удивительно чего код работает с одной частью, но не с другой. хотя моя правка и помогла, я сильно не вглублювався в проблему, возможно неправильно прописан алгоритм сортировки, по желанию советую пройтись дебаггером
проблема была такая, что это был один и тот же элемент массива.
сначала прибавляли к нему себя самого, а после этого отнимали от полученного значения его же, тоже самое было и в третьей строчке кода.
вот пример
i =j
arr[i] = arr[j] = 10;
10 += 10; //20
20 -= 20; //0
0 -= 0; //0
0
10 / 10 / 13
Регистрация: 27.09.2016
Сообщений: 248
16.12.2017, 01:11 9
ну я тоже так подумал, просто выглядит странно, quicksort кажется написан правильно, хотя я давно его не писал поэтому может и забыл, ну ладно, я рад, что смог вам помочь
0
16.12.2017, 01:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2017, 01:11
Помогаю со студенческими работами здесь

Обмен между значениями двух переменных, не используя при этом третьей переменной
Подскажите как написать программу, которая производит обмен между значениями двух переменных, не...

Функция перестановки значений двух переменных
Напишите обобщенную функцию, которая меняет значения в двух переменных. Ваша функция должна иметь...

Вывести таблицу значений функции двух переменных
Вычисления значений функций с указанными значениями исходных данных. Результаты вывести в виде...

Вывести таблицу значений функции от двух переменных
протабулировать функции, зависящие от 2-х переменных. Организовать диалог с пользователем по вводу...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru