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

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

Войти
Регистрация
Восстановить пароль
 
 
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
#1

Как скоротить, не обьявляя переменную? - C++

16.09.2013, 21:42. Просмотров 538. Ответов 17
Метки нет (Все метки)

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

В операторе иф ошибка. Я все же хотел как-нибудь выпиндреться и не обьявлять булеву переменную и вводить прямо в скобки ифа. Вот что я надумал

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
// Листинг 7.3.
 
 // Сложные условия в конструкциях while
 
 Boop: counter++; cout << "Enter a Bool number: "; if(  cin >>)return 0;// начало цикла
    unsigned short small;
 
    unsigned long large;
 
   const unsigned short MAXSMALL=65535;
 
 
 
   cout << "Enter a small number: ";
 
   cin >> small;
 
   cout << "Enter a large number: ";
 
  cin >> large;
 
 
 
   cout << "small: " << small << "...";
 
 
   // на каждой итерации проверяются три условия
 
   while (small < large && large > 0 && small < MAXSMALL)
 
      {
 
    if (small % 5000 == 0) // после каждых 5000 строк выводится точка
 
    cout << ".";
    small++;
    large-=2;
 
      }
 
 
 
   cout << "\nSmall: " << small << " Large: " << large << endl;
 
   goto Boop; // возвращение к началу
   system("pause");return 0;
 
 }
Как что-то подобное написать правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 21:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как скоротить, не обьявляя переменную? (C++):

Записать день в переменную d,месяц в переменную m, год в переменную y - C++
Как можно получить системную дату? Мне надо записать день в переменную d,месяц в переменную m, год в переменную y Заранее Спасибо!

Процедура, записывающая в переменную X минимальное из значений X и Y, а в переменную Y – максимальное - C++
Описать процедуру Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y – максимальное из этих значений...

Как строковую переменную(String) сканвертировать в переменную типа(Real) - Delphi
У меня есть Edit1.Text (строковая) а var x: Real каким образом мне сконвертировать Edit1.Text в х Подразумевается что в Edit1.Text...

Как задасть значение Textbox в переменную, а затем эту переменную вывести в другой форме - MS Access
Приветствую Есть форма с полем, где есть значение, как значение этого поле перенести в переменную, а затем вывести ее в другом поле,...

Как передать из ACCESS переменную STRING в переменную окружения (типа CMD команды SET=) - MS Access
Добрый день! Подскажите как установить переменную окружения из ACCESS. Допустим у меня есть переменная CurrentDir типа String и я хочу...

Как новую переменную пронумеровать через другую переменную? - Bash
здравствуйте, уважаемые сижу вот голову ломаю над элементарщиной: q=1 arg$q=2 echo $arg1 пытается произвести вычисления...

17
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
16.09.2013, 21:46 #2
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
К стати, я не вижу, как бы я вот написал то же самое биз него, так что зря его так критикуют.
элементарно Ватсон
C++
1
2
3
4
5
6
//Boop: 
while(1)
{ counter++; cout << "Enter a Bool number: "; if(  cin >>)return 0;// начало цикла
........................................
 
 }// goto Boop; // возвращение к началу
видать не зря

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
if( *cin >>)return 0;
что сие означает?
1
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
16.09.2013, 21:56  [ТС] #3
Спасибо!!!!!!


Означает выход из прграммы, по замыслу.
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
16.09.2013, 21:57 #4
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Означает выход из прграммы, по замыслу.
ну а по жизни?
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 21:59 #5
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Использование оператора безусловного перехода. К стати, я не вижу, как бы я вот написал то же самое биз него, так что зря его так критикуют.
Dimka-novitsek, для вас авторитеты в программировании существуют, кроме Либерти? Вот что Прата пишет насчёт goto.
1
Миниатюры
Как скоротить, не обьявляя переменную?  
ValeryS
16.09.2013, 22:04
  #6

Не по теме:

alsav22,
я бы даже сказал не в большинстве,а всегда
за всю мою практику ни разу не использовал
разве что в начале, когда переходил с ассемблера, мышление было "спагетти" испорчено

1
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
16.09.2013, 22:26  [ТС] #7
Да, спасибо!!

А вот как-то вставить булеву переменнуюв цикл, что-то пока не получается. Чтоб раз-она там, и не обьявлять ее.

С этим значком не плучается тоже, т.к. так if( *cin >>)return 0; получается error C2100: недопустимое косвенное обращение
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
16.09.2013, 22:32 #8
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
cin >>
ну дак данные с клавы заслать куда то надо
1
Tulosba
16.09.2013, 22:35
  #9

Не по теме:

ValeryS, ну для всяческих генераторов кода goto штука удобная.

1
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
16.09.2013, 22:42 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
ValeryS, ну для всяческих генераторов кода goto штука удобная.
не спорю поскольку не работал
но вот разбиратся
я раньше мог написать так
C++
1
2
3
4
5
if(a==b)
 goto met;
fnc();
met:
return;
потом писал так
C++
1
2
3
4
if(a==b)
 return;
fnc();
return;
а сейчас могу написать так
C++
1
2
3
if(a!=b)
 fnc();
return;
и пока не встречал кода который нельзя переписать без гото
1
zer0mail
2344 / 1974 / 193
Регистрация: 03.07.2012
Сообщений: 7,094
Записей в блоге: 1
17.09.2013, 00:05 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
и пока не встречал кода который нельзя переписать без гото
Можно-то можно, но не всегда нужно

Я делал расчеты, где штук 5 вложенных циклов. Каждый цикл на своем уровне проверяет некоторые условия и выход может произойти на цикл 2-3 уровнями выше (или вообще завершить все циклы). Как это просто сделать без goto (устанавливать различные флажки или есть другой способ)?
1
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
17.09.2013, 07:19 #12
Цитата Сообщение от zer0mail Посмотреть сообщение
Я делал расчеты, где штук 5 вложенных циклов. Каждый цикл на своем уровне проверяет некоторые условия и выход может произойти на цикл 2-3 уровнями выше (или вообще завершить все циклы). Как это просто сделать без goto (устанавливать различные флажки или есть другой способ)?
не понял
кто куда должен выйти?
кусочек кода, пожалуйста

Добавлено через 7 минут
ну вот пример
вместо
C++
1
2
3
4
5
6
for(i=0;i<10;i++)
  for(j=0;j<10;j++) 
     if(a==b)
        goto m1;
 
m1:
можно написать так
C++
1
2
3
4
5
6
7
fnc()
{
for(i=0;i<10;i++)
  for(j=0;j<10;j++) 
     if(a==b)
        return ;
}
или так
C++
1
2
3
4
5
6
7
8
9
for(i=0;i<10;i++)
  {
    for(j=0;j<10;j++) 
     { 
       if(a==b)
        break;
     }
    if(j<10)
       break;
или еще куча способов которые не нарушают модуль
0
zer0mail
2344 / 1974 / 193
Регистрация: 03.07.2012
Сообщений: 7,094
Записей в блоге: 1
17.09.2013, 10:13 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
не понял кто куда должен выйти?кусочек кода, пожалуйста
или еще куча способов которые не нарушают модуль
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
fnc()
{
for(i=0;i<10;i++) {
    for(j=0;j<10;j++)  {
        for(k=0;k<10;k++) {
            for(m=0;m<10;m++)  {
                 if(x==y) goto m2;
                 if(x==z) goto m1;
                 for(m=0;m<10;m++)
                     if(a==b) goto m0;
                     if(a==c) goto m2;
                }
            }
        }
        {...}
        m2:
    }
    {...}
    m1: 
}
m0:
....
}
1
Croessmah
Эксперт CЭксперт С++
13430 / 7585 / 857
Регистрация: 27.09.2012
Сообщений: 18,677
Записей в блоге: 3
Завершенные тесты: 1
17.09.2013, 10:19 #14
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
/* Данный набор операторов if и goto есть семантический эквивалент
 * оператора switch (x) */
if (x == 10)
  goto L10;
else if (x == 11)
  goto L11;
else if (x == 12)
  goto L12;
else
  goto Ldefault;
{                        <--- скобка 1
L10:                     <--- метка "case 10"
  y = 1;
  goto Finish;           <--- break
L11:                     <--- метка "case 11"
L12:                     <--- метка "case 12"
  y = 2;
  /* goto Finish; */     <--- закомментированный break
Ldefault:                <--- метка "default"
  y = 3;
  goto Finish;           <--- break
}                        <--- скобка 2
Finish:                  <--- метка за пределами switch'а, куда ведут все break'и
                              эта метка полностью эквивалентна тому, что есть
                              в циклах for и while
Взято из блога пользователя Evg "Как работает оператор switch в Си/Си++ "

Очень наглядно, да?
1
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
17.09.2013, 10:36 #15
Цитата Сообщение от Croessmah Посмотреть сообщение
Взято из блога пользователя Evg
во первых он пишет не реальный код, а как это работает
во вторых это не всегда так
этот подход при сильно разреженном свитче
например такой код
C++
1
2
3
4
5
6
7
switch(m)
 {
   case 11: /* code 11*/ break;
   case 12: /*code12*/ break;
   case 13: /*code13*/ break;  
   default:  /*codeDefault*/
 }
превратится в ассемблере в такой код( чаще всего)
tabl:
offset code 11
offset code 12
offset codeDefault

1 вычесть из m 11
2 если меньше нуля и больше 2 то идти на codeDefault
3 полученное число умножить на размер адреса(чаще всего 4)
4 прибавить полученное число к адресу таблицы
5 по полученному адресу читать смешение
6 идти по полученному смещению

вечером скину дизасемблерный код (сейчас нет возможности)
а может и имитацию на Си засандалю
zer0mail, подумать надо, не готов так сходу
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 10:36
Привет! Вот еще темы с ответами:

Как строковую переменную передать из TStringStream в переменную String? - Delphi
Доброе время суток! Подскажите, как строковую переменную передать из TStringStream в переменную String? Можно ли на прямую...

Как передать переменную окна через текстовую переменную? - JavaScript
Открыл одно окно, потом второе, и хочу передать индетефикатор первого окна во второе, чтобы оно там что-то с ним сделало. Как это сделать...

Как создать статическую переменную в Паскале? Переменную, которая сохраняет значение, при выходе из функции - Pascal
Пробую так, но, естественно, ничего не получается: procedure a; var s : integer; begin s := 0; inc(s); writeln(s); ...

Как вставить в переменную текст и переменную вместе? - PHP
Вопрос для бывалых программистов наверное простой, но не где пока не нашел ответа. Подскажите пожалуйста как мне в переменную допустим...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
17.09.2013, 10:36
Ответ Создать тему
Опции темы

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