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

Постфиксная и префиксная форма инкремента и декремента. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 102, средняя оценка - 4.89
Charmer
 Аватар для Charmer
1 / 1 / 0
Регистрация: 16.08.2009
Сообщений: 17
10.01.2010, 05:16     Постфиксная и префиксная форма инкремента и декремента. #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
31
32
33
34
35
36
37
38
39
#include<iostream.h>
#include<stdio.h>
int main(int args[])
{
//Вводим с клавиатуры значение a и вычисляем значения c и d     
int a;
int c;
int d;
    cout<<"Vvedite a: ";
cin>>a;
c=++a;
d=a++;
//Вводим с клавиатуры значение b и вычисляем значения e и f
int b;
int e;
int f;  
    cout<<"Vvedite b: ";
cin>>b;
e=--b;
f=b--;
//выводим полученные значения на экран
cout <<"c= ";
cout<<c<<"\n";
cout <<"a= ";
cout<<a<<"\n";
cout <<"d= ";
cout<<d<<"\n";
cout <<"a= ";
cout<<a<<"\n";
cout <<"e= ";
cout<<e<<"\n";
cout <<"b= ";
cout<<b<<"\n";
cout <<"f= ";
cout<<f<<"\n";
cout <<"b= ";
cout<<b<<"\n";
return 0;
}
.

При значениях A=2 и B=3 по моим подсчетам должны получатся такие рез-ты:
C=3,A=3
D=2,A=3
E=2,B=2
F=3,B=2,
а на деле выходит по другому.
Подскажите, пжл, где моя ошибка.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Search..
Заказ софта
 Аватар для Search..
338 / 183 / 10
Регистрация: 26.05.2009
Сообщений: 863
10.01.2010, 06:17     Постфиксная и префиксная форма инкремента и декремента. #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
#include <iostream> // Для cout и cin
 
int main(int argc, char *argv[])
{
    int a, b, c, d, e, f;           // Не инициализированные переменные хранят мусор. Это чтобы напомнить ...
 
    std::cout << "Enter A: ";       // Введите A:
    std::cin  >> a;             // Вводим 2
    std::cout << "Enter B: ";       // Введите B:
    std::cin  >> b;             // Вводим 3
 
    c = ++a;                // A увеличится на 1, после чего присвоится переменной C. Итого: A = 3 и С = 3
    d = a++;                // A присвоится переменной D, после чего A увеличится на 1. Итого: D = 3 и А = 4
    e = --b;                // B уменьшится на 1, после чего присвоится переменной E. Итого: B = 2 и E = 2
    f = b--;                // B присвоится переменной F, после чего B уменьшится на 1. Итого: F = 2 и B = 1
 
    std::cout << "A = " << a << "\n";   // A = 4
    std::cout << "B = " << b << "\n";   // B = 1
    std::cout << "C = " << c << "\n";   // С = 3
    std::cout << "D = " << d << "\n";   // D = 3
    std::cout << "E = " << e << "\n";   // E = 2
    std::cout << "F = " << f << "\n";   // F = 2
 
    return false;                           // false - это 0. Просто мне так больше нравится ...
}
Теперь о постфиксе и о префиксе. О инкременте и декременте.

Инкремент - это оператор (++), который увеличивает число на 1.
Декремент - это оператор (--), который уменьшает число на 1.

Постфиксный - это означает то, что сначала над операндом (переменной) делаются какие-то операции и только после всех этих операций, действует оператор инкремента или декремента. То есть, если у нас такая строчка: A = 5 * B--;, то это будет читаться так: умножить 5 на B и присвоить полученный результат переменной A, после чего уменьшить переменную B на единицу.

Префиксный - это противоположность постфиксному. Сначала оператор инкремента или декремента увеличивает или уменьшает операнд (переменную) и только после этого над ним производятся остальные операции, если они есть. То есть, если у нас такая строчка: A = 5 * --B;, то это будет читаться так: уменьшить значение переменной B на единицу, после чего умножить 5 на B (а в это время в переменной B уже будет хранится значение, которое на единицу меньше изначального) и присвоить результат переменной A.

Надеюсь, объяснил ясно и доступно. Желаю удачи в изучении. Пока =)
Charmer
 Аватар для Charmer
1 / 1 / 0
Регистрация: 16.08.2009
Сообщений: 17
10.01.2010, 06:46  [ТС]     Постфиксная и префиксная форма инкремента и декремента. #3
Да, привет! Сорри, что сразу это упустила. Спасибо тебе большое за придание миниатюрности моей проге! С терминами "постфиксная", "префиксная" и т.д. я знакома и даже понимаю их, а вот объясни мне, пжл, что в твоём коде означают
C++
1
std::cout << "Enter A: "
Буквы std меня интересуют.
И еще, если не затруднит,
C++
1
(int argc, char *argv[])
Очень и очень тебе благодарна за помощь
Search..
Заказ софта
 Аватар для Search..
338 / 183 / 10
Регистрация: 26.05.2009
Сообщений: 863
10.01.2010, 07:47     Постфиксная и префиксная форма инкремента и декремента. #4
std - это имя пространства имен, в котором находится объекты cout и cin.
(int argc, char *argv[]) - это один из вариантов сигнатуры главной функции "main".

int argc - это целочисленная, знаковая переменная, которая содержит количество аргументов, переданных командной строке (в MS Windows до 98 это Command.exe, после - cmd.exe).

char *argv[] - это указатель на массив строк (аргументов командной строки). Первый элемент массива всегда содержит строку - полный путь к программе (самой себе).

----------------------------------------------------------------------------------------------------
Один из способов запустить программу в Windows, это кликнуть по .exe файлу два раза мышью. Второй способ - это прописать полный путь к .exe файлу через командную строку (консоль). Когда используется второй способ, появляется возможность передавать "параметры командной строки".

Если у нас есть такая программа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main(int argc, char *argv[])
{
    if(argc > 1) // Если нам передали аргументы
    {
        std::cout << "Your arguments of the cmd:\n";  // То пишем эту строку
 
        for(int nI = 1; nI < argc; nI++) // и перечислим
        {
            std::cout << argv[nI] << "\n"; // все переданные нам аргументы
        }
    }
 
    return false;
}
То, запустив ее с помощью консоли, например так:

Код
c:\>C:\cpp\Argum.exe one two three etc ...
Your arguments of the cmd:
one
two
three
etc
...
Можем наблюдать аргументы, которые мы передали. Обычно, эта возможность используется в программах для передачи разных ключей (-t -l или что-то подобное).

----------------------------------------------------------------------------------------------------

Что касается миниатюрности твоей программы, так это можно сделать еще меньше ...
Вот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main(int argc, char *argv[])
{
    int arr[6];
 
    std::cout << "Enter A: ";
    std::cin  >> arr[0];
    std::cout << "Enter B: ";
    std::cin  >> arr[1];
 
    arr[2] = ++arr[0];
    arr[3] = arr[0]++;              
    arr[4] = --arr[1];
    arr[5] = arr[1]--;
 
    for(char ch = 'A'; ch <= 'F'; ch++)
        std::cout << ch << " = " << arr[(int)ch - 65] << "\n";
 
    return false;
}
----------------------------------------------------------------------------------------------------
Честно говоря, хотел объяснить подробно (написал такой огромный текст !), но нечаянно закрыл окно браузера и все, что я писал пропало, к сожалению. Снова писать не стал - очень долго, к тому же, я хочу спать. Пришлось объяснить так, как получилось - не вникая в подробности.

Если что, можешь писать мне на мыло (почту). Помогу, чем смогу. Вот мой почтовый адрес: vitali@email.com
Charmer
 Аватар для Charmer
1 / 1 / 0
Регистрация: 16.08.2009
Сообщений: 17
10.01.2010, 07:56  [ТС]     Постфиксная и префиксная форма инкремента и декремента. #5
я может быть когда-нибудь пойму всё то, что ты мне тут детально описал, а пока огромное спасибо, что откликнулся. Буду иметь ввиду твою руку помощи
Yandex
Объявления
10.01.2010, 07:56     Постфиксная и префиксная форма инкремента и декремента.
Ответ Создать тему
Опции темы

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