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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 102, средняя оценка - 4.66
Win32
25 / 24 / 0
Регистрация: 18.08.2009
Сообщений: 126
#1

Цикл в цикле (for()). - C++

26.09.2009, 17:43. Просмотров 13899. Ответов 20
Метки нет (Все метки)

Скажите пожалуйста, почему такая "штука" не работает?
C++
1
2
3
4
5
6
7
for ( i=0; i<N; i++ )
    {
        for (z=0;z<N;z++)
        {
         ... Выполняю своё действие.
        }   
    }
Цикл, который внутри первого, прогоняеться только 1 раз, хотя переменная N=40;
Ребята, подскажите пожалуйста как быть!
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2009, 17:43     Цикл в цикле (for()).
Посмотрите здесь:

Цикл в цикле - C++
Здравствуйте! У меня есть много векторов со множеством значений. Мне нужно произвести над ними несколько операций. И нужно это сделать в...

Цикл в цикле - C++
Написать программу, в которой пользователь вводит по строкам с клавиатуры элементы двумерного массива (пока пользователь не остановит...

Цикл в цикле - C++
Срочно нужно сдать до конца октября 5 программ, помогите пожалуйста с одной &quot; Дано натуральное число n, действительное x.Вычислить.&quot; ...

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

Разложение экспоненты в ряд тейлора. Цикл в цикле - C++
Здравствуйте. Сама задача: составить программу для вычисления множества значений функции exp x на интервале −40,1 с шагом 0.5 не...

Выяснить почему после ввода первого элемента массива цикл не работает (std::cin в цикле for) - C++
Добрый день! Взялся за простой пример из книги Лафоре. #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; const...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
26.09.2009, 17:47     Цикл в цикле (for()). #2
здесь правильно.
возможно, что-то внутри цикла неверно.
и где объявления переменных?
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
26.09.2009, 17:48     Цикл в цикле (for()). #3
Win32, Если все три переменные объявлены и N инициализирована, должно работать.
Win32
25 / 24 / 0
Регистрация: 18.08.2009
Сообщений: 126
26.09.2009, 17:51  [ТС]     Цикл в цикле (for()). #4
Вобщем, вот всё:
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
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
 
using namespace std;
 
int _tmain()
{
    int i;      /* Переменная для циклов            */
    int z = 0;
    int az=-1;
    double max = 0; /* Максимальный элемент массива     */
    double min = 0; /* Минимальный элемент массива      */
    int N;          /* Количество элементов в массиве   */
    int M;          /* Количество "ящиков"              */
    double S[40];       /* Отсортированный массив           */
    double A[] =    /* Определяем массив                */
    {
        3,1,2
    };
 
    /* 1. Определяем колличество элементов в массиве. */
    N = sizeof(A) / sizeof(A[0]);
 
    /* 2. Определяем максимальный и минимальный элемент этого массива. */
    for ( i=0; i<N; i++ )
    {
    if ( A[i] > max )
    max = A[i];
    if ( A[i] < min )
    min = A[i];
    }
 
    /* 3. Определяем количество "ящиков"! */
    M = max / 2 + 1;
 
    /* 4. "Раскидываем" элементы по "ящикам" отсортированного массива. */
    for ( i=0; i<N; i++ )
    {
        for (z=0;z<N;z++)
        {
            int zs=z+2;
            if ( A[z]<zs && A[z]>z)
            {
            az=az+1;
            S[az]=A[z];
            cout << "If " << A[z] << " < " << zs << " and " << A[z] << " > " << z << endl;
            cout << "ITS: " << z << "     " << A[z] << " going into S" << az << endl;
            cout << z << endl << endl;
            A[z]=0;
            }
        }   
    }
 
    /* 4. Выводим на печать уже отсортированный массив. */
    for ( i=0; i<N; i++ )
    {
    cout << S[i] << " ";
    }
 
    cin.get();
    return 0;
}
Делаю сортировку массива. Этот массив - это просто пример. Массив Ящичным алгоритмом. Инфы по нем в интернете нет. Помоги пожалуйста, второй день сижу.... ((((

Добавлено через 1 минуту
В условии, во втором цикле, вобще запутался
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
26.09.2009, 17:54     Цикл в цикле (for()). #5
кто тебя обманул что у тебя N равно 40? N = 3
C++
1
2
double A[] = { 3, 1, 2 };
N = sizeof(A) / sizeof(A[0]);
эти вложенные циклы работают до конца
rrrFer
Заблокирован
26.09.2009, 17:56     Цикл в цикле (for()). #6
Win32,
напиши что должна делать программа
Win32
25 / 24 / 0
Регистрация: 18.08.2009
Сообщений: 126
26.09.2009, 17:58  [ТС]     Цикл в цикле (for()). #7
Цитата Сообщение от M128K145 Посмотреть сообщение
кто тебя обманул что у тебя N равно 40? N = 3
C++
1
2
double A[] = { 3, 1, 2 };
N = sizeof(A) / sizeof(A[0]);
Изначальная переменная:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double A[] =    /* Определяем массив                */
    {
        14.2594,        7.6226,         8.1113,         23.7865,
        20.1796,        27.3322,        10.2708,        30.1469,
        11.0851,        24.4584,        20.0111,        27.8091,
        1.4991,         31.7734,        0.0454,         5.3713,
        31.1648,        29.7484,        29.4232,        -2.8434,
        6.6163,         22.2269,        10.5985,        0.6183,
        19.8660,        -1.7290,        19.3626,        33.6190,
        20.4391,        15.6690,        8.3869,         19.8722,
        15.8876,        9.4932,         8.0816,         10.4655,
        0.3828,         6.9225,         26.5060,        15.4990
    };
Добавлено через 1 минуту
Цитата Сообщение от rrrFer Посмотреть сообщение
Win32,
напиши что должна делать программа
Отсортировать данный массив методом ящичной сортировки.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
26.09.2009, 18:00     Цикл в цикле (for()). #8
цикл проходит полностью! вот
посмотри
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
#include "iostream"
 
using namespace std;
 
int _tmain()
{
    int     i;              /* Переменная для циклов                        */
    int z = 0;
    int az=-1;
    double max = 0; /* Максимальный элемент массива         */
    double min = 0; /* Минимальный элемент массива          */
    int N;                  /* Количество элементов в массиве       */
    int M;                  /* Количество "ящиков"                          */
    double S[40];           /* Отсортированный массив                       */
 
        double A[] =    /* Определяем массив                            */
    {
        14.2594,                7.6226,                 8.1113,                 23.7865,
        20.1796,                27.3322,                10.2708,                30.1469,
        11.0851,                24.4584,                20.0111,                27.8091,
        1.4991,                 31.7734,                0.0454,                 5.3713,
        31.1648,                29.7484,                29.4232,                -2.8434,
        6.6163,                 22.2269,                10.5985,                0.6183,
        19.8660,                -1.7290,                19.3626,                33.6190,
        20.4391,                15.6690,                8.3869,                 19.8722,
        15.8876,                9.4932,                 8.0816,                 10.4655,
        0.3828,                 6.9225,                 26.5060,                15.4990
    };
 
    /* 1. Определяем колличество элементов в массиве. */
    N = sizeof(A) / sizeof(A[0]);
    cout<<N<<endl;
 
    /* 2. Определяем максимальный и минимальный элемент этого массива. */
    for ( i=0; i<N; i++ )
    {
        if ( A[i] > max )
            max = A[i];
        if ( A[i] < min )
            min = A[i];
    }
 
    /* 3. Определяем количество "ящиков"! */
    M = max / 2 + 1;
 
    int counti(0), countz(0);
    /* 4. "Раскидываем" элементы по "ящикам" отсортированного массива. */
    for ( i=0; i<N; i++ )
    {
        ++counti;
        for (z=0;z<N;z++)
        {
            ++countz;
            int zs=z+2;
            if ( A[z]<zs && A[z]>z)
            {
                az=az+1;
                S[az]=A[z];
                cout << "If " << A[z] << " < " << zs << " and " << A[z] << " > " << z << endl;
                cout << "ITS: " << z << "     " << A[z] << " going into S" << az << endl;
                cout << z << endl << endl;
                A[z]=0;
            }
        }       
    }
 
    std::cout<<"counti = "<<counti<<"\ncountz = "<<countz;
 
    cin.get();
    return 0;
}
Win32
25 / 24 / 0
Регистрация: 18.08.2009
Сообщений: 126
26.09.2009, 18:05  [ТС]     Цикл в цикле (for()). #9
Может тогда кто нибудь поможет с самим алгоритмом?

Добавлено через 2 минуты
А именно с 4ым пунктом... Заранее спасибо!
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.09.2009, 18:14     Цикл в цикле (for()). #10
При первом просмотре сразу видно:
- если массив не содержит отрицательных чисел, то min всегда будет равно 0 (хоть в дальнейшем эта переменная и не используется).
-
/*3. Определяем количество "ящиков"! */
M = max / 2 + 1;
, а сама переменная М в дальнейшем не используется.
Win32
25 / 24 / 0
Регистрация: 18.08.2009
Сообщений: 126
26.09.2009, 18:25  [ТС]     Цикл в цикле (for()). #11
Алгорит ящичной сортировки:
Пусть имееться некоторый массив. Находим самый минимальный и максимальный элемент. Задаем число корзин (ящиков). Вычисляем величину h = ( Amax - Amin ) / m ( m - количество ящиков). Далее просматриваем массив. Каждому Ai -> k ( Каждому элементу сопоставляем номер ящика, в котором он находиться).
k = [(Ai - Amax ) / h] + 1;
Каждому ящику придадим тип списка. Заполняем списки для каждого из ящиков. В каждом из ящиков в среднем содержиться n/m элементов. В каждом из ящиков проводим упорядовачиние (например с помощью линейного алгоритма).
Заполняем исходный массив.
=(
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.09.2009, 19:33     Цикл в цикле (for()). #12
Первоначальный код сами писали?
Win32
25 / 24 / 0
Регистрация: 18.08.2009
Сообщений: 126
26.09.2009, 19:36  [ТС]     Цикл в цикле (for()). #13
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Первоначальный код сами писали?
Да.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.09.2009, 19:53     Цикл в цикле (for()). #14
Судя по приведенному Вами алгоритму ящичной сортировки в Вашем коде есть несколько ошибок, и если первую половину кода можно просто исправить, то вторую половину (как раз ту о которой Вы задали первый вопрос) нужно переписывать. Как я понял Вы в данной части кода:
C++
1
2
3
4
5
6
7
for ( i=0; i<N; i++ )
        {
                for (z=0;z<N;z++)
                {
                 ... Выполняю своё действие.
                }       
        }
пытались каждому элементу (Ai) сопоставить номер ящика (k) и здесь же пытались в каждом из ящиков произвести упорядовачиние элементов.
Эти два действия необходимо разделить (т.е. не выполнять их в одном цикле for()).
Сначало в первом цикле for() необходимо каждому элементу (Ai) сопоставить номер ящика (k), а в следующем цикле for() в каждом из ящиков произвести упорядовачиние элементов. И обязательное условие чтобы эти циклы не были вложены друг в друга.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2009, 20:02     Цикл в цикле (for()).
Еще ссылки по теме:

Переменная в цикле for - C++
Пишу консольное приложение, а оно ругается такими ошибками как: main.cpp name lookup of `i' changed for new ISO `for' scoping main.cpp ...

Условие в цикле - C++
Здравствуйте. Почему в этом случае цикл выполняется девять раз: for(int year = 0; year &lt; 10; year++) А в этом десять: for(int year...

функция в цикле - C++
ситуация такова: есть отдельная функция, которая вставлена в цикл. соль: компилятор цикл тупо пропускает, переходит на getch(); и все ...

Ошибка в цикле - C++
Задание: Написать цикл программы. от К=1 до К=10 #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main () ...

Ошибся в цикле for - C++
Я хотел что бы программа выдала все числа от 0 до 9 включительно с шагом 0.1, программа не выдаёт ошибки но шаг делает всё равно 1. Где я...


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

Или воспользуйтесь поиском по форуму:
rrrFer
Заблокирован
26.09.2009, 20:02     Цикл в цикле (for()). #15
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
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
int main(){
    int *a,max,n,i,m,min,h,j,tmp,l,tmp2;
    vector<int> *v;
    n=40; m=5;
    
    a=new int[n];
    v=new vector<int>[m];
    for(i=0;i<n;i++)
        a[i]=n-i;
 
    for(i=0;i<n;i++)
        cout<<a[i]<<endl;
    cout<<"------------------------------\n";
 
    min=max=a[0];
    for(i=1;i<n;i++){
        if(a[i]>max)
            max=a[i];
        if(a[i]<min)
            min=a[i];
    }
 
    h=(max-min)/m+1;
    for(i=0;i<n;i++)
        v[(-a[i]+max)/h].push_back(a[i]);
 
    for(i=0;i<m;i++)
        for(j=0,tmp=v[i].size();j<tmp;j++){
            for(l=j+1,tmp2=j;l<tmp;l++)
                if(v[i][l]<v[i][tmp2])
                    tmp2=l;
            l=v[i][j];
            v[i][j]=v[i][tmp2];
            v[i][tmp2]=l;
        }
    for(i=m-1,l=0;i>=0;i--)
        for(j=0,tmp=v[i].size();j<tmp;j++,l++)
            a[l]=v[i][j];
 
    for(i=0;i<n;i++)
        cout<<a[i]<<endl;
 
    system("pause");
    return 0;
}
по возрастанию

Добавлено через 6 минут
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
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
int main(){
    int *a,max,n,i,m,min,h,j,tmp,l,tmp2;
    vector<int> *v;
    n=40; m=5;
    
    a=new int[n];
    v=new vector<int>[m];
    for(i=0;i<n;i++)
        a[i]=i;
 
    for(i=0;i<n;i++)
        cout<<a[i]<<endl;
    cout<<"------------------------------\n";
 
    min=max=a[0];
    for(i=1;i<n;i++){
        if(a[i]>max)
            max=a[i];
        if(a[i]<min)
            min=a[i];
    }
 
    h=(max-min)/m+1;
    for(i=0;i<n;i++)
        v[(-a[i]+max)/h].push_back(a[i]);
 
    for(i=0;i<m;i++)
        for(j=0,tmp=v[i].size();j<tmp;j++){
            for(l=j+1,tmp2=j;l<tmp;l++)
                if(v[i][l]>v[i][tmp2])
                    tmp2=l;
            l=v[i][j];
            v[i][j]=v[i][tmp2];
            v[i][tmp2]=l;
        }
    for(i=0,l=0;i<m;i++)
        for(j=0,tmp=v[i].size();j<tmp;j++,l++)
            a[l]=v[i][j];
 
    for(i=0;i<n;i++)
        cout<<a[i]<<endl;
 
    system("pause");
    return 0;
}
по убыванию.
Получается что каждый список упорядочен или по убыванию или по возрастанию, но всегда элементы из первого списка больше элементов второго, тоесть чтобы изменить порядок не достаточно изменить знак с < на >.

Добавлено через 1 минуту
в задании сказано использовать список, я использовал std::vector, просто заменить массивом не получится, т.к. надо знать сколько элементов уже есть в каждом массиве. Если STL использовать нельзя - пиши в личку
Yandex
Объявления
26.09.2009, 20:02     Цикл в цикле (for()).
Ответ Создать тему
Опции темы

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