Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2744, средняя оценка - 4.89
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
#1

Задачи для тренировки и лучшего понимания - C++

15.07.2010, 05:53. Просмотров 361178. Ответов 1272
Метки нет (Все метки)

Ребят. Кто-нибудь может дать задачу для тренировки? Приблизительно по всему курсу С++. Буду благодарен за сложную задачу, но которую способен сделать новичок-любитель. Затраты сил-времени не важно. Главное, чтобы это было интересно и не слишком рутинно. + Если найдется человек который даст задачу просьба помогать с кодом, который я буду себя скидывать. Не переписывать за меня, но указывать на ошибки и желательно объяснять. Заранее спасибо.

Список задач, решение которых присутствует в данной теме:
43
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 05:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задачи для тренировки и лучшего понимания (C++):

Прошу примеров для понимания INDY
Уважаемые коллеги и братья по интересу. Прошу примеров использования Indy UDP...

Ищу примеры для понимания взаимодействия Callback + event
Господа, подкиньте плиз какой-нибудь пример для понимания взаимодействия...

Элементарные программы, для лучшего понимания языка...
Здравствуйте. Вот сегодня решил что пора изучать с++. Есть пару задач. Начал...

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

Нужны задачи для тренировки
Здравствуйте киньте пожалуйста задания по с++ для человека начинающего ...

Нужны простые задачи для тренировки
Добрый день всем:) Наверное подобных тем как я тут сотни,но всё же. Начал...

1272
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.07.2010, 14:39 #101
Цитата Сообщение от лендер Посмотреть сообщение
Сообщение от MikeSoft
Lavroff, вот вам ещё задачка ... здесь больше на логику.
Даны две переменных:
Код C++1
2 int a = 10;
int b = 25;
Не используя третью переменную добиться результата:
Код C++1
2 a = 25;
b = 10;
То есть, поменять значения местами.
У задачи существует как минимум три решения (может и больше, но мне в голову пришли три)
Т.к. 10 и 25 помещаются в 1 байт, то можно так:
C++
1
2
3
4
5
6
a<<8
a+=b;
b=a;
b&=0xFF00;
b>>8;
a&0xFF
правда код конечно длинее, нозача ж на логику)
2
CyBOSSeR
18.07.2010, 15:08
  #102

Не по теме:

Цитата Сообщение от MikeSoft Посмотреть сообщение
Даны две переменных:
C++
1
2
int a = 10;
int b = 25;
Не используя третью переменную добиться результата:
C++
1
2
a = 25;
b = 10;
C++
1
std::swap(a, b);
И хрен поспоришь

6
MikeSoft
Эксперт С++
3917 / 1782 / 183
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 15:24 #103
лендер, именно так!
CyBOSSeR, да, с этим трудно поспорить ...

Kastaneda, идея со сдвигом интересная, но в коде у вас небольшой недочёт при сдвиге. Работать будет так:

C++
1
2
3
4
5
6
a <<= 8;
a += b;
b = a;
b &= 0xFF00;
b >>= 8;
a &= 0xFF;
2
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 16:20 #104
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main(){
  int a=10, b=25;
  a+=b;
  b=a-b;
  a-=b;
  std::cout << a << " " << b;
  return 0;
}
например
1
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.07.2010, 16:22 #105
MikeSoft, да, точно, наверно от жары мозги плавиться начали))

Пол дня сижу на задачей про шахматы, не могу найти ошибку
0
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:23 #106
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main(){
* int a=10, b=25;
* a+=b;
* b=a-b;
* a-=b;
* std::cout << a << " " << b;
* return 0;
}
например
неа, такой вариант уже был
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 16:24 #107
Цитата Сообщение от nikkka Посмотреть сообщение
неа, такой вариант уже был
аа, дак оно не самое правильное?
0
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:26 #108

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
MikeSoft, да, точно, наверно от жары мозги плавиться начали))
Пол дня сижу на задачей про шахматы, не могу найти ошибку
выложите, вместе подумаем



Добавлено через 1 минуту
alex_x_x, оно то правельное, просто такой вариант уже был...

Не по теме:

в суме "накопилось" 5 решений.
5, кто больше?

0
MikeSoft
Эксперт С++
3917 / 1782 / 183
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 16:30 #109
Цитата Сообщение от alex_x_x Посмотреть сообщение
аа, дак оно не самое правильное?
Правильно, конечно

Просто nikkka вёл к тому, что вариант уже был и интересно посмотреть, как можно ещё решить эту задачу.
Пару решений есть в этом посте: Задача для тренировки и лучшего понимания
0
nikkka
18.07.2010, 16:32
  #110

Не по теме:

Цитата Сообщение от MikeSoft Посмотреть сообщение
Просто nikkka вёл к тому, что вариант уже был и интересно посмотреть, как можно ещё решить эту задачу.
точниссимо

0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.07.2010, 16:46 #111
а я ее решил
Задача про шахматы:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>    
using namespace std;
class Chess{
    int chessboard[9][9];
    public:
        Chess(){
             for(int i=0;i<9;i++)
                for(int j=0;j<9;j++)
                chessboard[i][j]=0;}
    void stephorse(int,int);
    bool correct (int,int);
    void somechessman(int,int);
    string operator^(Chess);
};
void Chess::stephorse (int a,int b){
     if(correct((a-2),(b+1)))
        chessboard[a-2][b+1]=1;
     if(correct((a-2),(b-1)))
        chessboard[a-2][b-1]=1;
     if (correct((a+2),(b-1)))
        chessboard[a+2][b-1]=1;
     if(correct((a+2),(b+1)))
        chessboard[a+2][b+1]=1;   
     if(correct((a+1),(b-2)))
        chessboard[a+1][b-2]=1;
     if(correct((a-1),(b-2)))
        chessboard[a-1][b-2]=1;
     if(correct((a-1),(b+2)))
        chessboard[a-1][b+2]=1;
     if(correct((a+1),(b+2)))
        chessboard[a+1][b+2]=1;         
     } 
bool Chess::correct(int a,int b){
    return (a>=1)&&(a<=8)&&(b>=1)&&(b<=8) ? true : false;
} 
void Chess::somechessman(int a,int b){
    chessboard[a][b]=1;
} 
string convert(int a,int b){
    string S;
    string mas[]={"0","A","B","C","D","E","F","G","H"};
    string ms[]={"0","1","2","3","4","5","6","7","8"};
    S=mas[a]+ms[b]+"\n";
    return S;
}   
string Chess::operator^(Chess b){
    string S;
    for(int i=0;i<9;i++)
       for(int j=0;j<9;j++)
           if((chessboard[i][j]==1)&&(b.chessboard[i][j]==0))
             S+=convert(i,j);      
     return S;
 } 
int deconvert(char a){
    char mas[]={'A','B','C','D','E','F','G','H'};
    for (int i=0;i<8;i++)
       if(mas[i]==toupper(a))
       return (i+1);
   }                              
int main (){  
   Chess white;
   Chess black;
   black.somechessman(deconvert('b'),7); //обозначаем черного коня на поле
   black.somechessman(deconvert('b'),3); //обозначаем пешку на поле
   black.somechessman(deconvert('e'),2); //обозначаем белого короля на поле
   black.somechessman(deconvert('h'),7); //обозначаем черного короля на поле
   white.stephorse(deconvert('c'),4); //просчитываем ходы белого коня
   black.stephorse(deconvert('b'),7); //просчитываем ходы черного коня
   cout<<"White horse can go to :"<<endl<<(white^black)<<endl;
system("pause");
return 0;    
}
Выводит:
White horse can go to :
A3
B2
B6
D2
E3
E5
Добавлено через 2 минуты
Вопрос к людям более опытным, почему вот в этом участке:
C++
1
2
3
4
5
6
7
class Chess{
    int chessboard[9][9];
    public:
        Chess(){
             for(int i=0;i<9;i++)
                for(int j=0;j<9;j++)
                chessboard[i][j]=0;}
Не получается сделать просто
C++
1
int chessboard[9][9]={0};
Компилятор на такое ругался.
2
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:51 #112
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не получается сделать просто
Код C++
1
int chessboard[9][9]={0};
Компилятор на такое ругался.
нельзя писать chessboard[9][9]. не забывайте, отсчёт ведётся с нуля, по этому максимальный индекс 9-элементного массива 8.
поправьте, плиз если что :S
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.07.2010, 16:56 #113
Цитата Сообщение от nikkka Посмотреть сообщение
нельзя писать chessboard[9][9]. не забывайте, отсчёт ведётся с нуля, по этому максимальный индекс 9-элементного массива 8.
поправьте, плиз если что :S
))Да это я знаю, я не про то. Почему не получается инициализировать массив нулями, а приходится делать это через цикл?
0
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:59 #114
Цитата Сообщение от Kastaneda Посмотреть сообщение
))Да это я знаю, я не про то. Почему не получается инициализировать массив нулями, а приходится делать это через цикл?
а это вообще возможно??... : O
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.07.2010, 17:03 #115
Вне класса это можно сделать именно так:
C++
1
int chessboard[9][9]={0};
А вот в классе почему так не получатся
0
besstiaa
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
18.07.2010, 17:07 #116
Kastaneda,наверно это надо делать в конструкторе без аргументов, например.
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.07.2010, 17:10 #117
Цитата Сообщение от besstiaa Посмотреть сообщение
Kastaneda,наверно это надо делать в конструкторе без аргументов, например.
А можно код? А то что-то мне кроме цикла ни чего в голову не лезет.
0
besstiaa
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
18.07.2010, 17:17 #118
Kastaneda,просто предположение. Попробовать не на чем, так с массивом ранее не приходилось сталкиваться.
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 17:22 #119
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
int chessboard[9][9]={0};
Здесь ты проинициализировал нулем только нулевой элемент матрицы, остальные были проинициализированы значением по умолчанию, к счастью, тоже нулем.
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
2
3
for(int i=0;i<9;i++) 
  for(int j=0;j<9;j++) 
    chessboard[i][j]=0;}
Здесь нет инициализации - просто заполнение нулями.
Инициализация:
C++
1
2
3
4
5
int matrix[3][3] = {
  { 0, 0, 0 },
  { 0, 0, 0 },
  { 0, 0, 0 }
};
Цитата Сообщение от besstiaa Посмотреть сообщение
Kastaneda,наверно это надо делать в конструкторе без аргументов, например.
К сожалению, в C++ пока нет средств для инициализации массивов полей класса.
1
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 17:25 #120
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
К сожалению, в C++ пока нет никаких средст для инициализации массивов полей класса.
однако как я понимаю при описании
int chessboard[9][9];
при конструировании объекта вызовется конструктор по умолчанию, что в данном случае означает заполнение нулями
1
18.07.2010, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2010, 17:25
Привет! Вот еще темы с решениями:

Какая база требуется для понимания C++?
Доброго времени суток! Возникло желание научиться работать в Си, но одолели...

Какую литературу для первоначального понимания С++ нужно учить
Что первоначальное для понимания нужно учить и от куда лучше вычитывать? ...

Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
Не могу понять пользу рекурсии, может ли кто привести код в пример.

Дайте задания для тренировки
День добрый. Учу C++. Я уверен, что тут есть люди которые с ним отлично...


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

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

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