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

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

Войти
Регистрация
Восстановить пароль
 
Дмитрий3241
640 / 510 / 52
Регистрация: 07.07.2011
Сообщений: 1,232
#1

Мистическая потеря итераций цикла - C++

08.06.2013, 00:11. Просмотров 540. Ответов 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
#include <iostream>
 
using namespace std;
 
void shift( int * array, int direct, int n );
void print( int * array, int n );
 
int main()
{
        int a[] = { 1, 2, 3 };
 
        for ( int i = 0; i < 3; i++ )
        {
                print( a, 3 );
                shift( a, 1, 3 );
        }
 
        return 0;
}
 
void print( int * array, int n )
{
        for ( int i = 0; i < n; i++ )
                cout << array[i] << " ";
        cout << endl;
}
 
void shift( int * array, int direct, int n )
{
        if ( direct == 0 )
        {
                int tmp = array[0];
                for ( int i = 0; i < n; i++ )
                        array[i] = array[i+1];
                array[n-1] = tmp;
        }
        else
        {
                int tmp = array[n-1];
                for ( int i = n; i > 0; i-- )
                        array[i] = array[i-1];
                array[0] = tmp;
        }
}
А вот вывод данной программы:
1 2 3

Как такое может быть?
Кстати вот еще что заметил, если сделать вот так:
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
void shift( int * array, int direct, int n );
void print( int * array, int n );
 
int main()
{
        int a[] = { 1, 2, 3 };
 
        int b = 0;
        for ( int i = 0; i < 3; i++ )
        {
                print( a, 3 );
                shift( a, 1, 3 );
                b++;
        }
 
        return 0;
}
 
void print( int * array, int n )
{
        for ( int i = 0; i < n; i++ )
                cout << array[i] << " ";
        cout << endl;
}
 
void shift( int * array, int direct, int n )
{
        if ( direct == 0 )
        {
                int tmp = array[0];
                for ( int i = 0; i < n; i++ )
                        array[i] = array[i+1];
                array[n-1] = tmp;
        }
        else
        {
                int tmp = array[n-1];
                for ( int i = n; i > 0; i-- )
                        array[i] = array[i-1];
                array[0] = tmp;
        }
}

То вывод нормальный, мб тут память заменяется где-нибудь, я просто всегда писал на c# и там таких чудо-штук не происходило.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 00:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мистическая потеря итераций цикла (C++):

Как посчитать количество итераций цикла? - C++
Не совсем представляю, как это осуществить. Т.е. возвращается х, а еще что-то вернуть, то будет немного не так, как хотелось бы, по идее....

Формула подсчета количества итераций цикла for - C++
Доброго времени суток Помогите ответом/советом/уч. материалом Пусть, for( int i = 1; i &lt;= 10; i++ ) ... имеем 10 итераций цикла ...

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++) - C++
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real; b,c:array of real; ...

Применение цикла if для определения простых чисел. If внутри цикла for - C++
Доброго времени суток, подскажите пожалуйста, в чем тут дело. С кодом все хорошо, все работает, просто я пытаюсь докопаться до сути и...

Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла. - C++
Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла.

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла - C++
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле...

10
newyork7776
350 / 343 / 80
Регистрация: 21.05.2013
Сообщений: 1,312
Завершенные тесты: 1
08.06.2013, 00:16 #2
1 2 3
3 2 1
2 3 1
вот такое у меня пишет
програма пашеш на ура!!!
0
Дмитрий3241
640 / 510 / 52
Регистрация: 07.07.2011
Сообщений: 1,232
08.06.2013, 00:22  [ТС] #3
newyork7776, Я тогда вообще в ступоре.
Прикрепил скрины, дабы меня не оклеветали.
0
Миниатюры
Мистическая потеря итераций цикла   Мистическая потеря итераций цикла   Мистическая потеря итераций цикла  

Мистическая потеря итераций цикла  
Игорь с++
437 / 460 / 16
Регистрация: 26.01.2011
Сообщений: 2,033
08.06.2013, 00:26 #4
Цитата Сообщение от newyork7776 Посмотреть сообщение
1 2 3
3 2 1
2 3 1
не а вывод такой -
1 2 3
3 1 2
2 3 1
0
Дмитрий3241
640 / 510 / 52
Регистрация: 07.07.2011
Сообщений: 1,232
08.06.2013, 00:27  [ТС] #5
Игорь с++, не суть важна, суть в том, что у меня вообще его нету ( есть но 1 итерация ) если я переменную пустышку в цикл не засуну.
0
Игорь с++
437 / 460 / 16
Регистрация: 26.01.2011
Сообщений: 2,033
08.06.2013, 00:28 #6
попробуй перестроить проект полностью
0
Дмитрий3241
640 / 510 / 52
Регистрация: 07.07.2011
Сообщений: 1,232
08.06.2013, 00:29  [ТС] #7
Цитата Сообщение от Игорь с++ Посмотреть сообщение
попробуй перестроить проект полностью
Я его по сути каждый раз перестраиваю командой
Bash
1
g++ perm.cpp -o perm
0
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
08.06.2013, 00:40 #8
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
C++
1
2
int tmp = array[n-1];
                for ( int i = n; i > 0; i-- )
То вывод нормальный, мб тут память заменяется где-нибудь, я просто всегда писал на c# и там таких чудо-штук не происходило.
C++
1
for ( int i = n-1; i > 0; i-- )
Может?
1
Дмитрий3241
640 / 510 / 52
Регистрация: 07.07.2011
Сообщений: 1,232
08.06.2013, 00:46  [ТС] #9
Цитата Сообщение от l2ded Посмотреть сообщение
Может?
Да и вправду, большое спасибо, я то же тупанул, даже не думал туда смотреть.
Хотя как это мешает циклу выполниться 3 раза?

Не по теме:

Fuck я все равно не допираю... Тогда почему переменная пустышка исправляла данную ситуацию?

0
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
08.06.2013, 00:57 #10
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Да и вправду, большое спасибо, я то же тупанул, даже не думал туда смотреть.
Хотя как это мешает циклу выполниться 3 раза?

Не по теме:

Fuck я все равно не допираю... Тогда почему переменная пустышка исправляла данную ситуацию?

Массиву А было выделено на 3 ячейки памяти, а вы использовали 4 (не существующую) вот и получился баг.

Не по теме:

У меня не исправила - это наверное МАГИЯ)

1
Дмитрий3241
08.06.2013, 01:23  [ТС]     Мистическая потеря итераций цикла
  #11

Не по теме:

Цитата Сообщение от l2ded Посмотреть сообщение
У меня не исправила - это наверное МАГИЯ)
Вот я и назвал тему "мистическая".

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 01:23
Привет! Вот еще темы с ответами:

Нахождение отрицательного цикла в графе и вывод цикла - C++
Вот программа по нахождению отрицательного цикла в графе и вывод цикла void Floyd(int GR, int parents , int V) { int checking; int...

Выполните, пожалуйста, задание, при этом вместо оператора цикла while используйте оператора цикла do_while - C++
Используя оператор цикла while, напишите программу для вычисления ниже следующей суммы. // fkdj.cpp: определяет точку входа...

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. - C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

Потеря памяти - C++
Здравия желаю!:) Вопрос: Возможна ли такая конструкция? #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; char...


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

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

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