Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

Организация цикла С++

22.08.2012, 19:01. Просмотров 1486. Ответов 25
Метки нет (Все метки)

Добрый день. Нужно организовать ниже приведенный код таким образом чтобы программа никогда не выводила более 10 чисел в одной строке, и организовать это при помощи инструкции while или for, и без участия if (а также без логического оператора !, и арифметического оператора деление по модулю %). Как мне кажется, осуществить это можно при помощи вложений одного цикла в другой, но знаний для этого у меня не достаточно.

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
// Программа, которая запрашивает у пользователя два числа и
// выводит все числа, которые находятся между ними
#include <iostream>
 
int main()
{
 std::cout << "Введите, пожалуйста, 2 числа: ";
 int a, b;
 int max, min;
 std::cin >> a >> b;
 // проверка на то, какое число меньше, чтобы с него
 // начать отчёт
 if (a >= b) {
   max = a;
   min = b;  
 }
 else {
   max = b;
   min = a;
 }
 /*
 // организация при помощи цикла while
 while ( max > min ) {
   ++min;
   std::cout << min << " " << std::endl;
   } */
 // организация при помощи цикла for
 for (; max > min; ++min) {
   std::cout << min << " ";
   /* if (!(min%10)) std::cout << "\n"; // можно решить задачу
при помощи логического оператора !,
и арифметического оператора деление по модулю %. Но данный метод
не подходит по условию. */
 }
 return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 19:01
Ответы с готовыми решениями:

Организация цикла сравнения значений элементов двух массивов
Надо, чтобы программа сравнивала РАЗНЫЕ элементы ОДНОГО МАССИВА. Например, со ...

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

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

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

Нахождение отрицательного цикла в графе и вывод цикла
Вот программа по нахождению отрицательного цикла в графе и вывод цикла void...

25
wtf?
19 / 19 / 13
Регистрация: 03.10.2010
Сообщений: 48
22.08.2012, 19:11 2
C++
1
2
3
4
5
6
7
for (; max > min; ++min)
{
     for(int i = 0; i < 11; ++i)
     {
         /* выводим что хотим */
     }
}
0
Andrey.K
344 / 265 / 128
Регистрация: 14.11.2010
Сообщений: 482
22.08.2012, 19:40 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
#include <iostream>
using namespace std;
int main() 
{
    int min,max,a,b;
    cout << "Введите, пожалуйста, 2 числа: ";cin>>a>>b;
    if (a >= b) 
    {
        max = a; min = b;  
    }
    else
    {
        max = b; min = a;
    }
    for(int i=min;i<max;)
    {
        for(int j=0;j<10;j++,i++)
            cout<<i<<" ";
        cout<<endl;
    }
    system("pause");
    return 0;
}
0
Buckstabue
177 / 126 / 24
Регистрация: 12.01.2012
Сообщений: 624
22.08.2012, 19:50 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
#include <iostream>
 
int main()
{
   std::cout << "Введите, пожалуйста, 2 числа: ";
   int a, b;
   int max, min;
   std::cin >> a >> b;
   // проверка на то, какое число меньше, чтобы с него
   // начать отчёт
   if (a >= b) {
      max = a;
      min = b;
   }
   else {
      max = b;
      min = a;
   }
 
   for (int i = 0; max > (min + i) && i < 10; ++i) {
      std::cout << (min + i) << " ";
   }
   return 0;
}
0
Andrey.K
344 / 265 / 128
Регистрация: 14.11.2010
Сообщений: 482
22.08.2012, 19:56 5
Цитата Сообщение от Buckstabue Посмотреть сообщение
Можно и одним, в чем проблема?
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
#include <iostream>
 
int main()
{
   std::cout << "Введите, пожалуйста, 2 числа: ";
   int a, b;
   int max, min;
   std::cin >> a >> b;
   // проверка на то, какое число меньше, чтобы с него
   // начать отчёт
   if (a >= b) {
      max = a;
      min = b;
   }
   else {
      max = b;
      min = a;
   }
 
   for (int i = 0; max > (min + i) && i < 10; ++i) {
      std::cout << (min + i) << " ";
   }
   return 0;
}
Она у тебя ломается, вернее показывает первые десять чисел, а если я сделаю интервал от 1 до 50?.
0
Buckstabue
177 / 126 / 24
Регистрация: 12.01.2012
Сообщений: 624
22.08.2012, 20:20 6
Не внимательно прочитал. Так она должна выводить все числа, но при этом после каждых 10 чисел выводить перевод строки? Тогда делай, как сказали выше через вложенный цикл, хотя задание тогда странное вообще

Добавлено через 3 минуты
Можно впринципе все равно один, использую условную операцию вида (a%b) == blabla ? ' ' : '\n' это ж не оператор, а операция. Так что можно и одним циклом отделаться.
Упс. Тут еще операцию % нельзя использовать, тогда не знаю, хотя это можно опять же заменить самодельной функцией
0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
22.08.2012, 20:50  [ТС] 7
Цитата Сообщение от wtf? Посмотреть сообщение
for (; max > min; ++min)
{
for(int i = 0; i < 11; ++i)
{
/* выводим что хотим */
}
}
я пробовал организовать цикл подобным методом, но ожидаемого результата не достиг: получалось либо выводить по 10 одинаковых значений, либо 10 пустых строк после которого идёт следующее число.

Добавлено через 3 минуты
Инструкцию if, а также операторы ==; !=; !; &&; || - использовать по условию нельзя

Добавлено через 13 минут
т.е. кода:
C++
1
2
3
4
5
6
7
8
9
10
// проверка на то, какое число меньше, чтобы с него
 // начать отчёт
 if (a >= b) {
   max = a;
   min = b;  
 }
 else {
   max = b;
   min = a;
 }
быть не должно.
ЗЫ. Только при помощи while или for
0
Andrey.K
344 / 265 / 128
Регистрация: 14.11.2010
Сообщений: 482
22.08.2012, 20:58 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main() 
{
    int min,max,a,b;
    cout << "Введите, пожалуйста, 2 числа: ";cin>>a>>b;
    a>b?max=a,min=b:min=a,max=b;
    for(int i=min;i<max;)
    {
        for(int j=0;j<10;j++,i++)
            cout<<i<<" ";
        cout<<endl;
    }
    system("pause");
    return 0;
}
Этот вариант жутко не правильный!!!
0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
22.08.2012, 21:02  [ТС] 9
Андрей, благодарю за труд, но что означает эта строка?
a>b?max=a,min=b:min=a,max=b;
0
Andrey.K
344 / 265 / 128
Регистрация: 14.11.2010
Сообщений: 482
22.08.2012, 21:07 10
Использовал условную операцию. Да, и я даже не предсталяю как без условий написать проверку , чтобы выводило между интервал все числа , если их количество не кратно десяти.
Поэтому если интревал 1 - 25, то выведет до 30, это из-за того что ты задал такие критерии выполнения задания. Кто знает как сделать лучше, поправит меня.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main() 
{
    int min,max,a,b;
    cout << "Введите, пожалуйста, 2 числа: ";cin>>a>>b;
    a>b?max=a:min=a;//условная операция
    b>a?max=b:min=b;
    for(int i=min;i<max;)
    {
        for(int j=0;j<10;j++,i++)
            cout<<i<<" ";
        cout<<endl;
    }
    system("pause");
    return 0;
}
0
zitxbit
90 / 742 / 279
Регистрация: 11.04.2012
Сообщений: 971
22.08.2012, 21:09 11
Я эту проблему решил бы вот-так:
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
#include <stdio.h>
#include <conio.h>
 
#include <iostream>
 
using namespace std;
 
int main()
{
    int size = 100;
 
    int min = 0, max = size / 10;
    
    while (min < size)
    {
        for (int i = min; i <= max; i++)
            std::cout << i << " ";
 
        min = max + 1;
        max = max + 10;
 
        std::cout << endl;
    }
 
    _getch();
 
    return 0;
}
0
Andrey.K
344 / 265 / 128
Регистрация: 14.11.2010
Сообщений: 482
22.08.2012, 21:14 12
Цитата Сообщение от zitxbit Посмотреть сообщение
Вариант неплохой, но опять же как и у меня, если задать интервал( в твоем случае size=75) 1-75, то выведет в моем варианте 1-80(в твоем 1-77) ,что не правильно. Да и он вводит числа с клавиатуры, что тоже по-моему влияет.
0
zitxbit
90 / 742 / 279
Регистрация: 11.04.2012
Сообщений: 971
22.08.2012, 21:16 13
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
#include <stdio.h>
#include <conio.h>
 
#include <iostream>
 
using namespace std;
 
int main()
{
    int size = 100;
 
    int min = 0, max = size / 10;
    
    while (min < size)
    {
        for (int i = min; i <= max; i++)
            std::cout << i << " ";
 
        min = max + 1;
        max = max + (size / 10);
 
        std::cout << endl;
    }
 
    _getch();
 
    return 0;
}
0
Andrey.K
344 / 265 / 128
Регистрация: 14.11.2010
Сообщений: 482
22.08.2012, 21:21 14
zitxbit, без обид , но при тесте size=75, в новом варианте всё равно не правильно.
Плюс данные с клавиатуры, где можно ввести сначала макс-число, а потом мин-число.
Я не уверен, но вроде нельзя не выйти за границы без условия if.
0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
22.08.2012, 21:23  [ТС] 15
Инициализация переменных должна осуществляться при помощи чтения со стандартного устройства ввода и сохранения их в объекте типа int.
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 21:34 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
int main()
{
    int j, i, min, max, a, b;
    std::cout << "Ââåäèòå, ïîæГ*ëóéñòГ*, 2 Г·ГЁГ±Г«Г*: ";
    std::cin >> a >> b;
    min = (a > b ? b : a);
    max = (a > b ? a : b);
    for(i = min; i <= max; )
    {
        for (j = 0; j < 10 && i <= max; ++i, ++j)
           std::cout << i << ' ';
        std::cout << std::endl;
    }
    std::system("pause");
    return 0;
}
1
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
22.08.2012, 21:36  [ТС] 17
Цитата Сообщение от Thinker Посмотреть сообщение
min = (a > b ? b : a);
* * max = (a > b ? a : b);
Такого быть не должно: только начало учебника а тот код явно где-то с середины
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 21:37 18
А в остальном пойдет? При a != b можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
int main()
{
    int j, i, a, b;
    std::cout << "Ââåäèòå, ïîæГ*ëóéñòГ*, 2 Г·ГЁГ±Г«Г*: ";
    std::cin >> a >> b;
 
    for(i = a; i <= b; )
    {
        for (j = 0; j < 10 && i <= b; ++i, ++j)
           std::cout << i << ' ';
        std::cout << std::endl;
    }
    for(i = b; i <= a; )
    {
        for (j = 0; j < 10 && i <= a; ++i, ++j)
           std::cout << i << ' ';
        std::cout << std::endl;
    }
    std::system("pause");
    return 0;
}
Если заранее известно, что a<=b, то можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main()
{
    int j, i, a, b;
    std::cout << "Ââåäèòå, ïîæГ*ëóéñòГ*, 2 Г·ГЁГ±Г«Г*: ";
    std::cin >> a >> b;
 
    for(i = a; i <= b; )
    {
        for (j = 0; j < 10 && i <= b; ++i, ++j)
           std::cout << i << ' ';
        std::cout << std::endl;
    }
    std::system("pause");
    return 0;
}
1
zitxbit
90 / 742 / 279
Регистрация: 11.04.2012
Сообщений: 971
22.08.2012, 21:39 19
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
#include <stdio.h>
#include <conio.h>
 
#include <iostream>
 
using namespace std;
 
int main()
{
    int a = 0, b = 0;
    printf("a = "); scanf("%d",&a);
    printf("b = "); scanf("%d",&b);
 
    int min = a, max = 10;
    while (min < b)
    {
        for (int i = min; i <= max && i <= b; i++)
            std::cout << i << " ";
 
        min = max + 1;
        max = max + 10;
 
        std::cout << endl;
    }
 
    _getch();
 
    return 0;
}
1
Миниатюры
Организация цикла С++  
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
22.08.2012, 21:52  [ТС] 20
Цитата Сообщение от Thinker Посмотреть сообщение
1

#include <iostream>
int main()
{
* * int j, i, a, b;
* * std::cout << "Введите, пожалуйста, 2 числа: ";
* * std::cin >> a >> b;
for(i = a; i <= b; )
* * {
* * * * for (j = 0; j < 10 && i <= b; ++i, ++j)
* * * * * *std::cout << i << ' ';
* * * * std::cout << std::endl;
* * }
* * std::system("pause");
* * return 0;
}
прошу прощения за то, что сразу не изложил всё условие полностью:
Организация цикла С++

Добавлено через 2 минуты
Цитата Сообщение от zitxbit Посмотреть сообщение
printf("a = "); scanf("%d",&a);
* * printf("b = "); scanf("%d",&b);
по условию, это быть не должно
0
22.08.2012, 21:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2012, 21:52

Выполните, пожалуйста, задание, при этом вместо оператора цикла while используйте оператора цикла do_while
Используя оператор цикла while, напишите программу для вычисления ниже...

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

Организация памяти.
Здравствуйте. Объясните, пожалуйста, вот что: Допустим есть класс, с...


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

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

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