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

Что получится из кода - C++

Восстановить пароль Регистрация
 
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 746
22.03.2013, 16:05     Что получится из кода #1
Необходимо описать результат выполнения программы:
1) Что получится из кода
2) Название: 2p.jpg
Просмотров: 68

Размер: 32.8 Кб
3) Название: 3p.jpg
Просмотров: 69

Размер: 26.9 Кб
4) Что получится из кода
5) Что получится из кода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fjay69
 Аватар для fjay69
85 / 85 / 1
Регистрация: 26.10.2012
Сообщений: 248
22.03.2013, 16:15     Что получится из кода #2
1) обращение к процедуре ampersand. поскольку внутри метода создаются копии n и k,
исходные переменные не изменятся. printf выведет "n=5 k=10"
2) поочередное сравнение переменной и. Т.к. i=2, ночего не произойдет (case 2: )
хотя case 2 может быть просто меткой. Тогда вызывается default (на экран выводится 9)
3) 15 раз на экран выводится результат битового И 1 и 7;
4) в процедуру init передаётся указатель на v, но указателю присваивается адрес новой памяти
Поэтому cout<<v выведет 20
5) это тоже побитовое И
saaresto
9 / 9 / 0
Регистрация: 22.03.2013
Сообщений: 23
22.03.2013, 16:20     Что получится из кода #3
Цитата Сообщение от fjay69 Посмотреть сообщение
обращение к процедуре ampersand. поскольку внутри метода создаются копии n и k,
Как раз-таки нет, копия создается только для n, а k передаётся по ссылке
fjay69
 Аватар для fjay69
85 / 85 / 1
Регистрация: 26.10.2012
Сообщений: 248
22.03.2013, 16:22     Что получится из кода #4
Цитата Сообщение от saaresto Посмотреть сообщение
Как раз-таки нет, копия создается только для n, а k передаётся по ссылке
Ох, точно. Проморгал)
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 746
22.03.2013, 16:29  [ТС]     Что получится из кода #5
А можно еще такого типа задачки вставить, что бы так же ответили) Я так понимаю - для вас это как орешки)) если, кончено же, вас не затруднит
saaresto
9 / 9 / 0
Регистрация: 22.03.2013
Сообщений: 23
22.03.2013, 16:31     Что получится из кода #6
Цитата Сообщение от ПростоЯ Посмотреть сообщение
А можно еще такого типа задачки вставить, что бы так же ответили) Я так понимаю - для вас это как орешки)) если, кончено же, вас не затруднит
Лучше уж разбираться в этом, чем готовые ответы получать
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 746
22.03.2013, 16:34  [ТС]     Что получится из кода #7
Цитата Сообщение от saaresto Посмотреть сообщение
Лучше уж разбираться в этом, чем готовые ответы получать
Дело в том, что специальность совсем другая, а эти задачки необходимо решить. Проще обратиться к людям, для которых это не составит абсолютно никакого труда, нежели учить то, что тебе совсем не пригодиться по твоей профессии.
Taatshi
22.03.2013, 16:35
  #8
 Комментарий модератора 
ПростоЯ, задание на форум перепечатываем ручками. Предупреждение.
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
22.03.2013, 16:42     Что получится из кода #9
Цитата Сообщение от fjay69 Посмотреть сообщение
2) поочередное сравнение переменной и. Т.к. i=2, ночего не произойдет (case 2: )
хотя case 2 может быть просто меткой. Тогда вызывается default (на экран выводится 9)
а разве если не ставить после выполнения тела case break; следующий case не выполниться?

Добавлено через 2 минуты
Цитата Сообщение от fjay69 Посмотреть сообщение
3) 15 раз на экран выводится результат битового И 1 и 7;
а как же "i++;"? по идее должно выводиться побитовое И для всех чисел от 1 до 15 И 7
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 746
22.03.2013, 16:45  [ТС]     Что получится из кода #10
Хорошо, исправлюсь:
6) здесь вывод числа b=213.92222232, да?
C++
1
2
3
4
5
6
#include <stdio.h>
int main()
{
double b = 213.492222232;
printf("%i",(int)(b+.5));
}
7)
C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
int m,i=1;scanf("%d",&m);
while(i<=m)
{
printf("%d%c",i*i,(i%6==0 || i==m)? '\n':' ');
i++;
}
}
8)
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
int i=1;
while(i<=5)
{
printf("%d ",i<<5);
i++;
}
}
9)
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
int i=1;
while(i<=6)
{
printf("%d ",~i&1);
i++;
}
}
10)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <exception>
using namespace std;
class a {
public:
virtual void f(int) { cout<<"a int"; }
virtual void f(char*) { cout<<"a char*"; }
};
class b : public a {
public:
virtual void f(char*) { cout<<"b char*"; }
};
int main (void) {
b* o = new b;
o->f(0);
return 0;
}
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
22.03.2013, 17:07     Что получится из кода #11
Цитата Сообщение от fjay69 Посмотреть сообщение
4) в процедуру init передаётся указатель на v, но указателю присваивается адрес новой памяти
Поэтому cout<<v выведет 20
в процедуру передается указатель (т.е. внутри функции сейчас *v, просто название у него другое) затем x = new int выделяем память для типа int, фактически указатель v теперь указывает в другую область памяти нежели до входа в функцию, затем *x = 10 изменяем переменную по указателю, так что должно вывести 10. хотя я могу и ошибаться))

Добавлено через 1 минуту
6) нет, число будет усечено до int 213

Добавлено через 8 минут
7) пока i будет меньше m будет выводиться квадрат i и (если i делиться на 6 без остатка или i равно m выведется конец строки иначе пробел) т.е. выводет квадрат всех чисел до заданного через пробел
8) не уверен, но должно вывести 5 и все
9) выполняет побитовое И, результат побитово инвертирует (0 заменяет на 1, а 1 на 0)

10) точно не знаю))

Добавлено через 7 минут
10) точно не знаю)) но, возможно, если я не ошибаюсь, будет вызвана виртуальная ф-ция класса а f(int) { cout<<"a int"; }
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
22.03.2013, 18:28     Что получится из кода #12
10ый код интересный.
Цитата Сообщение от igor001 Посмотреть сообщение
10) точно не знаю)) но, возможно, если я не ошибаюсь, будет вызвана виртуальная ф-ция класса а f(int) { cout<<"a int"; }
будет b::f(char*). Прикол в том, что если изменить аргумент в b::f(char*) на int, то опять же будет вызвана она, т.е. b::f(int).
Тут рарешение имен работает так: сначала ищется функия в самом классе, если не найдена, то ищется в базовом. Если в классе есть 2 функции с подходящей сигнатурой, то в дело вступает преобразование типов (если надо). Если в классе есть только одна функция с подходящей (после преобразования типа) сигнатурой, то выбирается она, даже если в базовом классе есть функция с точно подходящей сигнатурой (т.е. без преобразования типа).

Вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class a {
public:
    virtual void f(int) { cout<<"a int" << std::endl; }
    virtual void f(const char*) { cout<<"a const char*"<< std::endl; }
    virtual void f(bool) { cout<<"a bool"<< std::endl; }
};
 
class b : public a {
public:
    virtual void f(bool) { cout<<"b bool"<< std::endl; }
};
 
int main () {
    b* o = new b;
    o->f("asfd");
    return 0;
}
несмотря на то, что в классе а есть подходящая функция, вызовется b::f(bool), т.к. она подошла после преобразования const char* в bool.
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 746
25.03.2013, 16:34  [ТС]     Что получится из кода #13
Цитата Сообщение от igor001 Посмотреть сообщение
7) пока i будет меньше m будет выводиться квадрат i и (если i делиться на 6 без остатка или i равно m выведется конец строки иначе пробел) т.е. выводет квадрат всех чисел до заданного через пробел
у меня при компилировании этого кода всегда выводит через пробел квадрат каждого числа до введенного. Никакое условие с 6-кой не соблюдается. Почему так?

Добавлено через 3 минуты
Цитата Сообщение от igor001 Посмотреть сообщение
8) не уверен, но должно вывести 5 и все
странно, выводится на экран следующие цифры через пробел: 32 64 96 128 160...не понятно,от куда из условия это взялось.

Добавлено через 9 минут
Цитата Сообщение от igor001 Посмотреть сообщение
9) выполняет побитовое И, результат побитово инвертирует (0 заменяет на 1, а 1 на 0)
на экран вывелось: 0 1 0 1 0 1
но в условие же нет, что изначально задано число 1 0 1 0 1 0...
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
26.03.2013, 13:29     Что получится из кода #14
C++
1
(i%6==0 || i==m)? '\n':' '
можно записать как:
C++
1
2
if(i%6 == 0 || i == m) '\n';
else ' ';
оператор % означает остаток от деления. дело в том что, как выяснилось, проверка условия вообще не выполняется, во всяком случае в моем компиляторе ). причину я не знаю, но если записать вариант if/else то компилятор будет ругаться, а короткую запись условия он, видимо, попросту игнорирует. через пробел из-за того, что ожидается char после числа, но так как char не выводится то вместо него появляется пробел

Добавлено через 20 минут
8) дико извиняюсь. я почему-то думал что operator << в данном случае это как считывание из потока, а это оператор сдвига. т.е. цифра 1 типа int занимает 8 бит памяти и побитово кодируется как: "00000001" соответственно совершив операцию сдвига единицы на 5 (1<<5) получим "00100000" что есть число 32. то же самое происходит для остальных чисел до 5 включительно

Добавлено через 11 минут
9) пардон, операции ведь выполняются с лева на право. итак: 1 это (для простоты обойдемся четырьмя битами) "0001", соответственно "~1" == "1110" тогда "1110&0001" == "0" (см. побитовые операции с++ в Internet). возьмем, к примеру следующий вариант: "~3&1". "3" == "0011", "~3" == "1100", "1100&0001" == "1".

Добавлено через 16 минут
10) когда я отписывался в эту тему, я только начал читать раздел о виртуальных функциях, и не совсем понимал как они работают, но теперь, я думаю что все-таки будет вызвана функция класса "b". Виртуальные функции замещаются функциями производных классов, а так как класс "b" производный от класса "а" и функция "f()" была вызвана из объекта класса "b" то будет вызвана именно функция класса "b".
Цитата Сообщение от Kastaneda Посмотреть сообщение
сначала ищется функия в самом классе, если не найдена, то ищется в базовом.
функция искалась бы, если была бы вызвана функция класса "а" так как функция "f()" перегружена несколько раз. ув. Kastaneda поправьте если не прав имхо нуб еще, но судя по тому что я на данный момент знаю логика привела меня именно к такому ответу

Добавлено через 2 минуты
хотя ответ такой-же но логика немного другая
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.03.2013, 13:35     Что получится из кода #15
Цитата Сообщение от igor001 Посмотреть сообщение
я думаю что все-таки будет вызвана функция класса "b".
А что гадать? Скомпилируй да запусти)

Цитата Сообщение от igor001 Посмотреть сообщение
функция искалась бы, если была бы вызвана функция класса "а" так как функция "f()" перегружена несколько раз. ув. Kastaneda поправьте если не прав имхо нуб еще, но судя по тому что я на данный момент знаю логика привела меня именно к такому ответу
Ничего не понял%)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 14:27     Что получится из кода
Еще ссылки по теме:

Что означает это фрагмент кода? C++
C++ Как циклически организовать задание значений, пока не получится то, что надо
C++ Что происходит в этом фрагменте кода?

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

Или воспользуйтесь поиском по форуму:
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
26.03.2013, 14:27     Что получится из кода #16
на сколько я понимаю при перегрузке функций происходит подбор наиболее подходящей

Добавлено через 23 секунды
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что гадать? Скомпилируй да запусти)
тоже вариант)

Добавлено через 12 минут
получилось то что я и ожидал, но сорь Kastaneda, прочитав ваше обоснование ответа на 10й вопрос я не совсем верно понял то, что вы сказали, прочитав во второй раз все сошлось
Yandex
Объявления
26.03.2013, 14:27     Что получится из кода
Ответ Создать тему
Опции темы

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