Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.81/27: Рейтинг темы: голосов - 27, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 13
1

Ищу начинающих программистов!

13.07.2011, 16:02. Показов 5183. Ответов 49
Метки нет (Все метки)

Ищу начинающих или продвинутых программистов на C++,C,Objective-C,C# для общения и обмена опытом!
Недавно таким образом учился знакомый говорит очень помогло. Поэтому кто готов к обмену опытом и к взаимопомощи. Пишите email в личку или прям сюда. Желательно что бы был GMAIL.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2011, 16:02
Ответы с готовыми решениями:

Ищу таких же начинающих программистов, как я
Здравствуйте, я ищу таких же начинающих программистов на c++. Чтобы вместе с ними создать беседу в...

Ищу программистов, можно начинающих для настройки и интеграции crm битрикс 24
Обучение предоставляется онлайн, нужно пройти обучение и сдать экзамен, успешно сдавшим экзамен,...

Ищу программистов Cocos2d-x для разработки игр, Ищу программистов C++
Привет всем. Ищу разработчиков С++ для мобильной игры (iOS, Android и WP в перспективе)....

Ищу программистов
Ищу программистов, чтобы соеденится и сформировать команду хакеров.

49
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 00:08 21
я написал решение задачи kravam-а, но оно такое быдло, что даже стыдно показывать(
я формулу не высчитывал .
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
14.07.2011, 00:10 22
Просьба: проверить самому (кто сказал что алгоритм единственный?) и сократить код до минимума. Я завтра посмотрю.
Кстати, мой код такой: (псевдокод)

C++
1
2
3
4
5
6
7
8
9
10
 struct koordinati_ {
  int nomer_stroki;
  int nomer_stolbtsa;
 } koordinati;
 
 
void matrix<T>::f_perevod_koordinat (koordinati_* koordinati, int y, int x) {
 //Так, тут в одном операторе присваивания умещается нахождение строки
 //А во втором операторе присваивания умещается нахождение столбца 
};
...Так что в любом случае есть куда стремиться.

Добавлено через 48 секунд
OstapBender, окультуривай и показывай
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.07.2011, 00:12 23
интересно посмотреть на то, что подразумеваеться под диагональю прямоугольной матрицы
1
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
14.07.2011, 00:15 24
Читать умеешь? Блин специально для тех кто не умеет читать:
1 2 3 4 5
0 2 3 4 5
3 4 5 6 7
7 8 9 0 5
2 3 4 4 6
5 6 7 8 9
2 3 4 5 6
4 5 6 7 8

Итак, для ДАННОЙ задачи диагонали такие будут (начиная с нулевой)
1
0 2
3 2 3
7 4 3 4
2 8 5 4 5
5 3 9 6 5
2 6 4 0 7
4 3 7 4 5
5 4 8 6
6 5 9
7 6
8
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 00:19 25
лень мне переделывать )
логика проста, ищем лежит X(номер диагонали) на нижней строке, или на правом столбце, ставим туда позицию curr , движемся вверх влево пока не дошли до Y
код
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
struct coords {
    int i; // строка
    int j; // столбец
};
 
coords at(coords diag, int n, int m) {
    
    if (diag.i<0 || diag.i>n+m-2) throw std::exception("Bad coordinates.");
 
    coords curr;
    if (diag.i >=0 && diag.i <m) {
        curr.i=n-1;
        curr.j=diag.i;
    }
    else {
        curr.j=m-1;
        curr.i=n+m-diag.i-2;
    }
 
    while (diag.j>0) {
        curr.i--;
        curr.j--;
        if (curr.i<0 || curr.j<0) throw std::exception("Bad coordinates.");
        diag.j--; // use diag.j as counter
    }
 
    return curr;
}
 
 
 
int main()
{
    int n=3, m=3;
    coords diag = {4,1};
    coords normal;
    try {
    normal = at(diag,n,m);
    } catch (std::exception& e) {
        std::cout << e.what() << '\n';
        getchar();
        return 1;
    }
 
    std::cout << normal.i << ' ' << normal.j << '\n';
 
    getchar();
}
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
14.07.2011, 00:22 26
Не проверял, но даже если верно- за труды тройка.
Придумайте формулку, ребята...
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.07.2011, 01:58 27
проверил на прямоугольной, работает, но для "вертикальных" матриц - M >= N
Код
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
#include <stdio.h>
 
#define M 9
#define N 5
 
void TranslateCoordForVertMatrix(int* x, int* y)
{
    if (*x <= M - 1)
    {
        *x -= *y;
    }
    else
    {
        *y = *x - M + 1 + *y;
        *x -= *y;
    }
}
 
int main()
{
    int x = 11, 
        y = 1;
    TranslateCoord(&x, &y);
    printf("i = %d\nj = %d", x, y);
    getchar();
    return 0;
}
/*пронумерованы диагонали
   0-- * * * * 3 
   1-- * * * 3 2 
   2-- * * 3 2 1 
   3-- * 3 2 1 0 
   4-- 3 2 1 0 4 
   5-- 2 9 0 4 *
   6-- 1 0 4 * *
   7-- 0 4 * * *
   8-- 4 * * * *
         | | | |
         9 | | |
          10 | |
            11 |
              12
*/
1
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
14.07.2011, 08:44 28
kravam,
Задача: имеется матрица размером M строк на N столбцов. Каждая диагональ имеет свой номер, нумерация диагоналей начинается с нуля. Диагонали идут снизу вверх слева направо. Элементы диагоналей нумеруются с нуля.
В приведённом тобой примере диагонали идут сверху вниз.

Добавлено через 1 минуту
Или я туплю и не правильно понял условие.
0
1254 / 883 / 190
Регистрация: 16.03.2008
Сообщений: 4,159
Записей в блоге: 1
14.07.2011, 08:47 29
C++
1
2
i = (x<=M) ? x-y : M-y;
j = (x<=M) ? y : (x-M) + y;

0
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
14.07.2011, 08:58 30
Возможно такое решение верно.
C
1
2
3
4
5
6
7
8
9
10
if (x <= M - 1)
{
    i = x - y;
    j = y;
}
else
{
    i = M - 1 - y;
    j = x - M + 1 + y;
}
0
1254 / 883 / 190
Регистрация: 16.03.2008
Сообщений: 4,159
Записей в блоге: 1
14.07.2011, 09:15 31
упс. Поспешил. Вместо M должно быть M-1 вроде
0
easybudda
14.07.2011, 09:21
  #32

Не по теме:

Цитата Сообщение от Mazanakisicq Посмотреть сообщение
Пишите email в личку или прям сюда.
Человек адреса почтовые собирает (может для спама, может для регистрации где-нибудь), а вы тут что устроили? Матрицы, диагонали... Офтоп сплошной!
:)

0
1254 / 883 / 190
Регистрация: 16.03.2008
Сообщений: 4,159
Записей в блоге: 1
14.07.2011, 11:17 33
вот с проверкой
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
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#define M1 3
#define N1 5
#define M2 5
#define N2 3
int A1[M1][N1]=
    {
        {0,1,2,3,4},
        {1,2,3,4,5},
        {2,3,4,5,6}
    };
int A2[M2][N2]=
    {
        {0,1,2},
        {1,2,3},
        {2,3,4},
        {3,4,5},
        {4,5,6}
    };
typedef struct
{
    int i;
    int j;
} coord;
 
coord getElement(int x, int y, int rows)
{
    coord res;
    res.i = (x<rows) ? x-y : rows-1-y;
    res.j = (x<rows) ? y : (x-rows+1) + y;
    return res;
}
int main()
{
    coord co;
    int i,j,k;
    for (i=0;i<M1+N1-1;++i)
    {
        if (i<M1)
        {
            for (j=0;(j<=i)&&(j<N2);++j)
            {
                co=getElement(i,j,M1);
                printf("%d ",A1[co.i][co.j]);
            }
        }
        else
        {
            k=N1+M1-i-1;
            if (k>M1) k=M1;
            for (j=0;j< k ;++j)
            {
                co=getElement(i,j,M1);
                printf("%d ",A1[co.i][co.j]);
            };
        }
        printf("\n");
    }
    printf("\n");
    for (i=0;i<M2+N2-1;++i)
    {
        if (i<M2)
        {
            k=i;
            for (j=0;(j<=i)&&(j<N2);++j)
            {
                co=getElement(i,j,M2);
                printf("%d ",A2[co.i][co.j]);
            }
        }
        else
        {
            k=N2+M2-i-1;
            if (k>M2) k=M2;
            for (j=0;j < k ;++j)
            {
                co=getElement(i,j,M2);
                printf("%d ",A2[co.i][co.j]);
            };
        }
        printf("\n");
    }
 
    return 0;
}
Добавлено через 21 минуту
Хех. Видимо ни когда не приходилось мне сталкиваться. Только, что осознал, что у меня с ходу не получается сделать функцию принимающую в качестве аргумента массив (или указатель на таковой). С учетом того, что массивы можгут быть разной заданной размерности.
(Вот как в моем коде выше. По идее вывод диагоналей просится в процедуру - код то один и тот же)
Но вот как?
0
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
14.07.2011, 11:31 34
Цитата Сообщение от voral Посмотреть сообщение
Хех. Видимо ни когда не приходилось мне сталкиваться. Только, что осознал, что у меня с ходу не получается сделать функцию принимающую в качестве аргумента массив (или указатель на таковой). С учетом того, что массивы можгут быть разной заданной размерности.
(Вот как в моем коде выше. По идее вывод диагоналей просится в процедуру - код то один и тот же)
Но вот как?
Не понял, Вы не знаете как создать функцию, в которую, в качестве параметра, передавался бы массив?
Ну как нибудь так:
C
1
2
3
4
5
6
7
8
void PrintDiag(int* arr, int N, int M)
{
   for (size_t i = 0; i < N; i++)
      for (size_t j = 0; j < N; j++)
         printf("%d", *(arr + (i * N + j)); // выводите, то что Вам нужно..
}
 
PrintDiag(&A[0][0], N, M);
1
1254 / 883 / 190
Регистрация: 16.03.2008
Сообщений: 4,159
Записей в блоге: 1
14.07.2011, 12:34 35
нет я не осознал что передавать надо &A[0][0]. Пытался через &A сделать
0
Заблокирован
14.07.2011, 12:43 36
Цитата Сообщение от voral Посмотреть сообщение
нет я не осознал что передавать надо &A[0][0]
не надо
Цитата Сообщение от voral Посмотреть сообщение
Пытался через &A сделать
покажи пример где ты пытался, я исправлю как надо

Добавлено через 4 минуты
PrintDiag(&A[0][0], N, M);
эквивалентно
PrintDiag(A[0], N, M);

Добавлено через 50 секунд
смысла нет сначала разыменовывать, а потом брать адресс. Масло маслянное
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 12:56 37
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
смысла нет сначала разыменовывать, а потом брать адресс. Масло маслянное
нет смысла писать this-> в методах, однако пишут.
так понятнее.
0
1254 / 883 / 190
Регистрация: 16.03.2008
Сообщений: 4,159
Записей в блоге: 1
14.07.2011, 12:58 38
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
покажи пример где ты пытался, я исправлю как надо
В общемто я и сам осознал. Вот примерно так я пытался сделать
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
#include <stdio.h>
#define M1 3
#define N1 5
#define M2 5
#define N2 3
int A1[M1][N1]=
    {
        {0,1,2,3,4},
        {1,2,3,4,5},
        {2,3,4,5,6}
    };
int A2[M2][N2]=
    {
        {0,1,2},
        {1,2,3},
        {2,3,4},
        {3,4,5},
        {4,5,6}
    };
void PrintDiag(int** arr, int N, int M)
{
    int i,j;
   for (i = 0; i < N; i++)
      for ( j = 0; j < N; j++)
         printf("%d ", *(arr + (i * N + j))); // выводите, то что Вам нужно..
}
 
int main()
{
    PrintDiag(A1, M1,N1);
    PrintDiag(&A2, M2,N2);
    return 0;
}
В результате имеем:
Bash
1
2
3
4
5
6
test4.c: In function ‘main’:
test4.c:33: warning: passing argument 1 of ‘PrintDiag’ from incompatible pointer type
test4.c:20: note: expected ‘int **’ but argument is of type ‘int (*)[5]’
test4.c:34: warning: passing argument 1 of ‘PrintDiag’ from incompatible pointer type
test4.c:20: note: expected ‘int **’ but argument is of type ‘int (*)[5][3]0 2 4 2 4 2 4 6 0 0 2 2 2 4 4 4 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Пытался решить при помощи количества звездочек в объявлении функции
0
Эксперт С++
1933 / 1045 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.07.2011, 13:01 39
эм... а не проще ли
C++
1
PrintDiag(A, N, M);
? или может я чего-то не понимаю в этой жизни...
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 13:03 40
voral, массивы сделай динамическими и этот вариант заработает, и никаких смещений выщитывать не нужно, оператор [] перегружен уже
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2011, 13:03

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ищу программистов
Всем Доброго времени суток! Столкнулась с такой же проблемой. Ищу программистов, но действительно...

Ищу программистов добровольцев
не нашел подходящего раздела, поэтому создал тут....

Ищу программистов (Блокчейн)
Ищу программистов для написание ядра (Блокчейн- аналог,Графена,Этериума и др). На данный момент...

Ищу программистов,разработчиков
Доброго времени суток, приглашаю к совместной работе над интересным онлайн проектом разработчиков...


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

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

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