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

Нужна помощь!Провести анализ работы всех циклов на примере какой нибудь легкой задачи.
Ответ: Вот вам задача с тремя циклами. А что именно анализировать нужно?

Вопрос: Объясните работу вложенного цикла

Привет всем,подскажите пожалуйста как работает данный цикл,я понимаю,что можно это "задание" сделать проще и без вложенного цикла,но не суть. В общем смысл я понимаю но: Значение pow и должно в каждом цикле приумножаться на 2,но в конце каждого цикла ему присваивается 1,хотя программа все равно его приумножает в каждой итерации. Эти циклы не зависят друг от друга или как? почему вроде в конце присваивается pow =1, но в итоге вложенный цикл этого не замечает?

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
#include <conio.h>
 
#include <iostream>
#include <climits>
 
using std::cout; // 
using std::endl;
using std::cin;
using std::ios_base;
 
 
int main() // 
 
        {
    setlocale (LC_ALL , "Russian");
 
    
    unsigned long long result = 2,pow = 1;
 
    for (int i(1); i <= 64; i++)
    { 
        for (int j(0); j < i; j++)
            pow *= 2;
            cout << "В сумме на " << i << "клетке" << result;
        result += pow;
        pow = 1;
        }
                          _getch();
                              return 0; //
}
Ответ: Во-первых, не используй имя pow для переменных, так как в стандартных функциях есть с таким же именем.
Во-вторых, как раз её можно использовать, чтобы убрать внутренний цикл:
C++
1
2
3
4
5
6
7
#include <cmath> // добавь
// ...
    for (int i(1); i <= 64; i++)
    { 
        cout << "В сумме на " << i << "клетке" << result;
        result += pow(2, i);
    }
Вопрос: Работа с циклами и подсчёт значений в массиве. Запутался в циклах, никак не могу понять

Рассматривается 7 программных продуктов, имеющих одинаковое назначение. Их оценивает 5 экспертов.
Из текстового файла считываются значения:

и так далее по каждому продукту...
Никак не могу понять, как организовать цикл так, чтобы выводилось, СКОЛЬКО экспертов сказали, что, например, продукт 0 лучше продукта 1, продукт 0 лучше продукта 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <fstream>
#include <math.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;
struct O {
    int nomer_prod;
    int nomer_exp;
    int ocenka;
};
int main()
{
    setlocale(LC_ALL, "Russian");
    int const size = 7;
 
    O O[size];
    ifstream f("baza.txt");
    for (int i = 0; i < size; i++)
    {
        f >> O[i].nomer_prod;
        cout << "Номер продукта: " << " " << O[i].nomer_prod << endl;
        int summa;
        summa = 0;
        for (int j = 0; j < 5; j++)
        {
            f >> O[j].nomer_exp >> O[j].ocenka;
            cout << "Номер эксперта: " << O[j].nomer_exp << " " << "Место: " << O[j].ocenka << " " << endl;
            summa = summa + O[j].ocenka;
        }
 
        int k[size][size];
        for (int m = 0; m < size; m++)
            for (int n = 0; n < size; n++)
            {
                for (int i = 0; i < size; i++)
                    for (int j = 0; j < size; j++)
                    {
                        if (O[m].ocenka > O[n].ocenka)
                        {k[m][n]++;}
                    }
                    cout << "Продукт " << m << " лучше продукта " << n << " " << k[m][n] << endl;
            }
        cout << "Суммарный ранг: " << summa << endl;
        cout << endl;
    }
}
Ответ: Байт,
сделал так. Теперь проблема в том, чтобы вывести полученные результаты на экран. Если это делать в основном цикле, то выведется по единичке много много раз. А если вынести за цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int k[size][size];
        for (int i = 0; i<size; i++)
            for (int j = 0; j<size; j++)
                k[i][j] = 0;
        for (int m = 0; m<size; m++)
            for (int n = 0; n<size; n++) 
            {
                if (O[m].ocenka > O[n].ocenka)
                    k[m][n]++;
            }
        cout << "Суммарный ранг: " << summa << endl;
        cout << endl;
    }
    for (int m = 0; m<size; m++)
        for (int n = 0; n < size; n++)
        {
            cout << "Продукт " << m << " лучше продукта: " << n << " " << k[m][n] << endl;
        }
, то будет сообщение о том, что "идентификатор k не определён". Она типа локальной. Если же её объявить глобально, то будут неправильные значения...
Вопрос: Повторение или продолжение работы программы (Цикл или нет)?

Ребят, прошу прощения за Заголовок темы. Я абсолютный новичек и даже не знаю, как назвать заголовок. По Ютубу пытаюсь изучать C# и программирование в целом. Прошел условия, циклы и переменные, и вот сразу решил создать первый маленький проект. Код будет под текстом.

Проект заключается в том, что просит ввести возраст и рост, после чего сообщает мне в текстовом виде все мною введенное. У меня начинается проверка if на предмет Возраста и Роста. Т.е. если Возраст превышает 121 год, то программа спрашивает "Вы - мумия?", затем закрывается. Если же Возраст не превышает 121 год, то требуется ввести Рост и начинается проверка if Роста. Если Рост свыше 230, то возникает вопрос "Вы - столб?" и программа закрывается, если менее 231, то программа начинает проверку цифр, что бы по-русски грамотно сделать вывод и, НАКОНЕЦ, выводит результат.
А я хочу сделать так, что, если все таки Возраст или Рост за пределами допустимого значения, то программа выдавала бы повтор на введение корректных данных (Возраста или Роса) и продолжала работу, а не закрывалась.

Я пытался сделать это с помощью цикла while, но что-то у меня все криво получалось и не получилось реализовать.
Прошу Вас, помогите, подскажите))) Спасибо!))
Вот он рабочий код:

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
static void Main(string[] args)
        {
            //Объявляем переменные
            int age; //Возраст в цифрах
            int height; //Рост в цифрах
            string let; //слова "Год, Года, Лет"
            string rost; //слова "Сантиметр, Сантиметра, Сантиметров"
            string mumi = "Вы - мумия?"; //Просто ввел переменную, что бы не вводить слова в коде
            string stolb = "Вы - столб?"; //Просто ввел переменную, что бы не вводить слова в коде
            
            //Первый вопрос для введния цифры в переменную age
            Console.Write("Введите свой возраст и нажмите Enter: ");
            age = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную age
            if (age > 121) //Проверка. Если возраст превышает 121 год, значит человек уже мумия
            {
                Console.WriteLine(mumi);
            }
            else //если человеку менее 122 лет, то идет запрос на введение цифры в переменную height
            {
                //Второй вопрос для введения цифры в переменную height
                Console.Write("Введите свой рост и нажмите Enter:");
                height = Convert.ToInt32(Console.ReadLine());
                if (height > 230) //Проверка. Если рос превышает 230 год, значит человек уже столб
                {
                    Console.WriteLine(stolb);
                }
                else //если человек ниже 231 сантиметра, то, перед выводом результата, идет проверка, какие именно цифры ввел человек, что бы вывод был по-русски грамотным
                {
                    //Проверка возраста. Если возраст заканчивается на 1, то выводим слово "Год", если на 2/3/4, то выводим солово "Года", в остальных случаях выводим слово "Лет"
                    switch (age)
                    {
                        case 1:
                        case 21:
                        case 31:
                        case 41:
                        case 51:
                        case 61:
                        case 71:
                        case 81:
                        case 91:
                        case 101:
                        case 121:
                            let = "год";
                            break;
                        case 2:
                        case 3:
                        case 22:
                        case 32:
                        case 42:
                        case 52:
                        case 62:
                        case 72:
                        case 82:
                        case 92:
                        case 102:
                        case 23:
                        case 33:
                        case 43:
                        case 53:
                        case 63:
                        case 73:
                        case 83:
                        case 93:
                        case 103:
                        case 24:
                        case 34:
                        case 44:
                        case 54:
                        case 64:
                        case 74:
                        case 84:
                        case 94:
                        case 104:
                            let = "года";
                            break;
                        default:
                            let = "лет";
                            break;
                    }
 
                    //Проверка роста. Если рост заканчивается на 1, то выводим слово "Сантиметр", если на 2/3/4, то выводим солово "Сантиметра", в остальных случаях выводим слово "Сантиметров"
                    switch (height)
                    {
                        case 1:
                        case 21:
                        case 31:
                        case 41:
                        case 51:
                        case 61:
                        case 71:
                        case 81:
                        case 91:
                        case 101:
                        case 121:
                        case 131:
                        case 141:
                        case 151:
                        case 161:
                        case 171:
                        case 181:
                        case 191:
                        case 201:
                        case 221:
                            rost = "сантиметр";
                            break;
                        case 2:
                        case 22:
                        case 32:
                        case 42:
                        case 52:
                        case 62:
                        case 72:
                        case 82:
                        case 92:
                        case 102:
                        case 122:
                        case 132:
                        case 142:
                        case 152:
                        case 162:
                        case 172:
                        case 182:
                        case 192:
                        case 202:
                        case 222:
                        case 3:
                        case 23:
                        case 33:
                        case 43:
                        case 53:
                        case 63:
                        case 73:
                        case 83:
                        case 93:
                        case 103:
                        case 123:
                        case 133:
                        case 143:
                        case 153:
                        case 163:
                        case 173:
                        case 183:
                        case 193:
                        case 203:
                        case 223:
                        case 4:
                        case 24:
                        case 34:
                        case 44:
                        case 54:
                        case 64:
                        case 74:
                        case 84:
                        case 94:
                        case 104:
                        case 124:
                        case 134:
                        case 144:
                        case 154:
                        case 164:
                        case 174:
                        case 184:
                        case 194:
                        case 204:
                        case 224:
                            rost = "сантиметра";
                            break;
                        default:
                            rost = "сантиметров";
                            break;
                    }
                    //Выводим результат введенных цифр
                    Console.WriteLine("Значицца, вам " + age + " " + let + " , а рост  " + height + " " + rost + "!");
                }
            }
            Console.ReadKey();
        }
Ответ:
C#
1
2
3
4
5
6
while (true)
{
   Console.Write("Введите свой возраст и нажмите Enter: ");
   age = Convert.ToInt32(Console.ReadLine());
    Console.Write("Введите свой рост и нажмите Enter:");
    height = Convert.ToInt32(Console.ReadLine());
.....тут твой код от if до Console.WriteLine("Значицца, вам " + age + " " + let + " , а рост " + height + " " + rost + "!"); } } ....

C#
1
}
Вопрос: Перечисление в поле таблицы по связи

Есть две таблицы (Первая-Виды работ, там ид и название, а вторая Здания там ид здания и виды работ). Стоит связь между ними 1 ко многим по первинному ключу в первой и виды работ во второй. Как сделать так чтоб я в поле виды работ таблицы Здания вводил пару ид первой таблицы, просто перечисление можно сделать видел примеры, а как сделать чтоб оно еще и проверяло правильно ли я ввел индексы? Я придумал только создать перечисление и селектом проверять. Може тможно какойто шаблон создать. Подскажите поджалуйста новичек в sql и ADO Net

Добавлено через 1 минуту
Может сделать перечисление и правило на поле?
Ответ: В таблице здания хочу в поле type_of_work сделать перечисление индексов таблицы Type_of_work
Вопрос: Работа оператора цикла

Работу какого оператора цикла можно описать следующей блок-схемой:
Ответ: while do
Вопрос: Перезапуск индекса при работе с циклом

Всем здравствуйте. Появилась задача написать матрицу, но посмотрев варианты ответа в интернете решил сделать что то свое. Получилось вот что

Python
1
2
3
4
5
6
a=[1,2,3,4,5]
x=0
while x<10:
    for r in a:
        print(a[r])
    x+=1
после чего выдало значения 2,3,4,5 и ошибку что такого индекса в строке не существует
больше всего, что когда начался новый цикл, индекс продолжал увеличиваться
1. Почему отсчет с 2 начался?
2. Как сделать так, чтобы индекс реснулся при начинании нового цикла?

Заранее спасибо
Ответ: LoBelia, используйте numpy, там есть и матрицы, и всё, что к ним прилагается.
Вопрос: Работа с циклами

Затрудняюсь написать код для 3 и 5 задания, объясните пожалуйста. Есть ли какие-нибудь хитрости, чтобы можно было с лёгкостью решать подобные задания? Трудно разобраться с этими циклами.
Ответ: alt3R_,
Код C++
1
f+=cos(exp(i*ln(x)));
Вопрос: Ошибка при работе с циклами

C#
1
2
3
4
5
6
7
8
9
10
11
int a = 500, b = 100;
            if (a < b)
            {
                Console.WriteLine("true");
            }
            else if (a > b)                                        //не правильно
            {
                for (int value1 = a; value1 <= b; value1--)
                    Console.WriteLine(value1);
            }
            Console.ReadKey();
Учу как работают циклы
VS ошибку не выдает но консоль при выполнении кода ничего не выдает просто пустая консоль.

Идея такая: если я изменяю значение "a" на меньшее чем "b" то консоль пишет "true" если изменяю значение "а" на большее чем "b" то прога должна отсчитать дикримент от "а" до "b" в данном случае от 500 до 100.
Что я не так сделал?
Ответ:
Сообщение от taras_student
если отсчитываю от 1000 до 100 консоль при выполнении считает только от 398 до 100,если от 100 до 10 то все норм.Что не так?
Все так, просто он отсчитывает быстро и вы не успеваете все увидеть.
А так как в консоле ограниченный размер буфера, то вы видите только последние строчки — остальные уже затерлись.
Можете при запуске программы установить размер консольного буфера на достаточный для того, чтобы видеть весь отсчет:
C#
1
Console.BufferHeight = a - b + 2;
Вопрос: Одновременная работу двух циклов openMP

как можно сделать так чтобы два цикла работали одновременно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma omp parallel 
{
#pragma omp sections
{
#pragma omp section
{
for
}
#pragma omp section
{
for
}
}
так? не могу понять....
Ответ: Мыша, угу, так:
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
#include <stdio.h>
#include <unistd.h>
#include <omp.h>
 
void infiniteLoop(int tid) {
    for (;;) {
        printf("thread %d\n", tid);
        usleep(100000);
    }
}
 
int main() {
    #pragma omp parallel sections num_threads(2)
    {
        #pragma omp section
        {
            infiniteLoop(omp_get_thread_num());
        }
        #pragma omp section
        {
            infiniteLoop(omp_get_thread_num());
        }
    }
 
    return 0;
}