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

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

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

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

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

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

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

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

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

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

1272
Kastaneda
Jesus loves me
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 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);
И хрен поспоришь:D

6
MikeSoft
Эксперт С++
3919 / 1784 / 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
бжни
2455 / 1661 / 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
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 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
бжни
2455 / 1661 / 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
Эксперт С++
3919 / 1784 / 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
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 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
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 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
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 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
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 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
Эксперт С++
2310 / 1683 / 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
бжни
2455 / 1661 / 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++?
Доброго времени суток! Возникло желание научиться работать в Си, но одолели...

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


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

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

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