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

Два цикла в параметре - C++

Восстановить пароль Регистрация
 
Chuba
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 11
28.11.2012, 20:18     Два цикла в параметре #1
На промежутке [100, n] найти количество чисел, составленных с цифр a,b,c.

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 <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main(){
    int a,b,c,n,k=0,y=0,i,q,h=0;
    char m;
    cout<<"a:"; cin>>a;
    cout<<"b:"; cin>>b;
    cout<<"c:"; cin>>c;
    cout<<"N:"; cin>>n;
    for(i=100; i<=n; i++) {
        int x=i;
        while (x/10>0) {
            x=x/10;
            k=k+1;}
        y=i;
        while (k!=0) {
            q=y%10;
            y=y/10;
            k=k-1;
            if (q!=a && q!=b && q!=c) goto m;
            else h=h+1;
            m:;
        }
        printf("\t %d", h);
    }
    getch();
}
Что здесь не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 20:18     Два цикла в параметре
Посмотрите здесь:

Два соседних цикла C++
Совместить два цикла C++
C++ Наследуемый класс в параметре шаблона
C++ 2 цикла в параметре
C++ Двумерный массив в параметре класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
28.11.2012, 20:21
  #2

Не по теме:

void main()
goto
printf

valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2012, 06:34     Два цикла в параметре #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
#include <iostream>
 using namespace std;
 #include <conio.h>
 #include <math.h>
 int main(){
 int a,b,c,n,k=0,y=0,i,q,h=0;
 cout<<"a:"; cin>>a;
 cout<<"b:"; cin>>b;
 cout<<"c:"; cin>>c;
 cout<<"N:"; cin>>n;
 for(i=100; i<=n; i++) {
 k=i;  
 while (k>0) {
 q=k%10;
 if (q!=a && q!=b && q!=c)
     break; 
 k/=10;
 }
 if(!k)
     h++;
 }
 cout<<h<<endl;
 getch();
 return 0;
 }
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
29.11.2012, 06:36     Два цикла в параметре #4
Цитата Сообщение от SeregaC++ Посмотреть сообщение
printf
тебе чем не угодил
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2012, 07:02     Два цикла в параметре #5
Chuba, цикл не может быть в параметре. Параметр - это всего лишь некоторая величина, а цикл - это потенциально многократный повтор неких операций. Попробуй внутри 38 градусов Цельсия 10 раз хлопнуть дверью? Не получится, в значение температуры ты даже не залезешь и не найдёшь там дверей. А ведь 10 раз хлопнуть дверью - это всего лишь один цикл.
Issues
29.11.2012, 13:56
  #6

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
тебе чем не угодил
ну раз это С++, то и вывод нужно по С++, а не С.

ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
29.11.2012, 14:34     Два цикла в параметре #7
Цитата Сообщение от SeregaC++ Посмотреть сообщение
ну раз это С++, то и вывод нужно по С++, а не С.
Это железное правило или все таки пожелание
мне например гораздо удобней выводить printf значение в разном виде одной и той же переменной
C++
1
2
char a='A';
printf ("%c %x %d",a,a,a);
с << так красиво не получится
далее printf всегда выводит в один и тот же поток (консоль у больших компьютеров, порт у микроконтроллеров)
<< я могу послать в любой поток который определю сам
так что они прекрасно дополняют друг друга и противопоставлять я бы их не стал
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 16:00     Два цикла в параметре #8
Цитата Сообщение от Chuba Посмотреть сообщение
Что здесь не так?
метка
Цитата Сообщение от Chuba Посмотреть сообщение
m:
переменная
Цитата Сообщение от Chuba Посмотреть сообщение
char m;
по твоему язык обладает излишними и ненужными инструкциями? Чем тебе goto так насолил?
Цитата Сообщение от SeregaC++ Посмотреть сообщение
goto
Добавлено через 4 минуты
ValeryS, кстати совсем недавно тут писала программку и споймала то ли баг, то ли сама не знаю что. Надо было напечатать байт (нуль терминированная последовательность) в хекс виде, так вот используя printf("%X", *string++) все работало как и ожидалось, а используя std::cout << std::hex << (int)*string++ некоторые байты были представлены как отрицательные int целые длиной по 4 байта. Такие вот дела.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
29.11.2012, 16:04     Два цикла в параметре #9
Цитата Сообщение от activnaya Посмотреть сообщение
std::cout << std::hex << (int)*string++ некоторые байты были представлены как отрицательные int целые длиной по 4 байта.
ну потому что к int приводила
попробуй unsigned char
<< щибко умный он сам знает что и как выводить, но когда нужен нестандартный вывод, приходится попрыгать
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2012, 16:09     Два цикла в параметре #10
Цитата Сообщение от ValeryS Посмотреть сообщение
мне например гораздо удобней выводить printf значение в разном виде одной и той же переменной
это отлично делается манипуляторами.
C++
1
2
3
int x;
std::cin>>x;
std::cout<<ios::dec<<x<<" "<<ios::hex<<x<<std::endl;
выведет два разных представления x. Но запомнить осмысленные имена модификаторов проще, чем коды спецификаторы для printf.

Добавлено через 2 минуты
d% - это decemal, или double? Я вот не могу этого запомнить, хоть ващето на память и не жалуюсь. Мои проги до сих пор помещаются в ней целиком, я этим пользуюсь, чтоб не тратить время, краску и бумагу на распечатку листингов. За тысячу строк вышел в первую же неделю ещё в 1995-м.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 16:10     Два цикла в параметре #11
Цитата Сообщение от ValeryS Посмотреть сообщение
ну потому что к int приводила
попробуй unsigned char
тогда выводился символ, а не его хекс код.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2012, 16:13     Два цикла в параметре #12
Цитата Сообщение от ValeryS Посмотреть сообщение
далее printf всегда выводит в один и тот же поток (консоль у больших компьютеров, порт у микроконтроллеров)
<< я могу послать в любой поток который определю сам
std::cout - это тоже всегда один поток.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
29.11.2012, 16:13     Два цикла в параметре #13
Цитата Сообщение от taras atavin Посмотреть сообщение
Но запомнить осмысленные имена модификаторов проще, чем коды спецификаторы вывода.
кому как

Цитата Сообщение от taras atavin Посмотреть сообщение
это отлично делается манипуляторами.
я этого не отрицаю
но мне например не доставляет удовольствие читать весь этот забор
Цитата Сообщение от taras atavin Посмотреть сообщение
std::cout<<ios::dec<<x<<" "<<ios::hex<<x<<std::endl;
вспоминая что << вывод а не сдвиг
как например красиво написать через << ?
C++
1
printf("x",a<<4);
но это мое личное мнение, никому не навязываю
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 16:14     Два цикла в параметре #14
вот и скрин
Миниатюры
Два цикла в параметре  
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2012, 16:16     Два цикла в параметре #15
Цитата Сообщение от ValeryS Посмотреть сообщение
но это мое личное мнение, никому не навязываю
Можешь - юзай. Но это тоже плюсы.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
29.11.2012, 16:18     Два цикла в параметре #16
Цитата Сообщение от activnaya Посмотреть сообщение
тогда выводился символ, а не его хекс код.
а этот модификатор ios::hex на него уже не действует?
Цитата Сообщение от taras atavin Посмотреть сообщение
std::cout - это тоже всегда один поток.
согласно правилам ООП могу переопределить(или не могу?)

Добавлено через 2 минуты
Цитата Сообщение от activnaya Посмотреть сообщение
вот и скрин
И де?
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
printf("x",a<<4);
пардон хотел конечно же написать
C++
1
printf("%x",a<<4);
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 16:19     Два цикла в параметре #17
Цитата Сообщение от ValeryS Посмотреть сообщение
а этот модификатор ios::hex на него уже не действует?
точно. так работает
C++
1
std::cout << std::ios::hex << 'A';
а так нет
C++
1
std::cout << std::hex << (unsigned char) 'A';
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
29.11.2012, 17:03     Два цикла в параметре #18
Цитата Сообщение от activnaya Посмотреть сообщение
по твоему язык обладает излишними и ненужными инструкциями? Чем тебе goto так насолил?
много где читал про goto, и везде пишут, что лучше его не использовать, где можно обойтись без него.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 17:08     Два цикла в параметре #19
Цитата Сообщение от SeregaC++ Посмотреть сообщение
много где читал про goto
даже боюсь поинтересоваться где именно. Наверное что-то от Дейкстры?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 17:13     Два цикла в параметре
Еще ссылки по теме:

C++ Как работают два цикла for ? поясните код
C++ Как задать два условия для цикла
Соединение строк в параметре функции C++

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

Или воспользуйтесь поиском по форуму:
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
29.11.2012, 17:13     Два цикла в параметре #20
Цитата Сообщение от activnaya Посмотреть сообщение
даже боюсь поинтересоваться где именно. Наверное что-то от Дейкстры?
Оператор goto в языках высокого уровня является объектом критики, поскольку чрезмерное его применение приводит к созданию нечитаемого «спагетти-кода». Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Доводы против оператора GOTO»,[2] который заметил, что качество программного кода обратно пропорционально количеству операторов goto в нём. Статья приобрела широкую известность как среди теоретиков, так и среди практиков программирования, в результате чего взгляды на использование оператора goto были существенно пересмотрены. В своей следующей работе Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность.

Код с goto трудно форматировать, так как он может нарушать иерархичность выполнения (парадигму структурного программирования) и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. goto также мешает оптимизации компиляторами управляющих структур.[3]

Некоторые способы применения goto могут создавать проблемы с логикой исполнения программы:
Если некоторая переменная инициализируется (получает значение) в одном месте и потом используется далее, то переход в точку после инициализации, но до использования, приведёт к тому, что будет использовано значение, которое находилось в памяти, выделенной под переменную, до момента выделения (и которое, как правило, является произвольным и случайным).
Передача управления внутрь тела цикла приводит к пропуску кода инициализации цикла или первоначальной проверки условия. Аналогично, передача управления внутрь процедуры или функции приводит к пропуску её эпилога, в котором производится инициализация (выделение памяти под локальные переменные и т. п.).

Доводы против оператора goto оказались столь серьёзны, что в структурном программировании его стали рассматривать как крайне нежелательный. Это нашло отражение при проектировании новых языков программирования. Например, goto был запрещён в Java и Ruby. В ряде современных языков он всё же оставлен из соображений эффективности в тех редких случаях, когда применение goto оправданно. Так, goto сохранился в Аде — одном из наиболее продуманных с точки зрения архитектуры языков за всю историю.[4] Однако в тех современных языках высокого уровня, где этот оператор сохранился, на его использование, как правило, накладываются жёсткие ограничения, препятствующие использованию наиболее опасных методов его применения: например, запрещается передавать управление извне цикла, процедуры или функции внутрь. Стандарт языка C++ запрещает обход инициализации переменной с помощью goto.

Формально доказано (теорема Бёма — Якопини), что применение goto не является обязательным, то есть не существует такой программы с goto, которую нельзя было бы переписать без него с полным сохранением функциональности (однако, возможно, с потерей эффективности).
Yandex
Объявления
29.11.2012, 17:13     Два цикла в параметре
Ответ Создать тему
Опции темы

Текущее время: 12:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru