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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
Mazanakisicq
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 13
13.07.2011, 16:02     Ищу начинающих программистов! #1
Ищу начинающих или продвинутых программистов на C++,C,Objective-C,C# для общения и обмена опытом!
Недавно таким образом учился знакомый говорит очень помогло. Поэтому кто готов к обмену опытом и к взаимопомощи. Пишите email в личку или прям сюда. Желательно что бы был GMAIL.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2011, 16:02     Ищу начинающих программистов!
Посмотрите здесь:

Помогите найти ошибку C++
С++ для начинающих C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 00:08     Ищу начинающих программистов! #21
я написал решение задачи kravam-а, но оно такое быдло, что даже стыдно показывать(
я формулу не высчитывал .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
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, окультуривай и показывай
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.07.2011, 00:12     Ищу начинающих программистов! #23
интересно посмотреть на то, что подразумеваеться под диагональю прямоугольной матрицы
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
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
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 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();
}
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
14.07.2011, 00:22     Ищу начинающих программистов! #26
Не проверял, но даже если верно- за труды тройка.
Придумайте формулку, ребята...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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
*/
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
14.07.2011, 08:44     Ищу начинающих программистов! #28
kravam,
Задача: имеется матрица размером M строк на N столбцов. Каждая диагональ имеет свой номер, нумерация диагоналей начинается с нуля. Диагонали идут снизу вверх слева направо. Элементы диагоналей нумеруются с нуля.
В приведённом тобой примере диагонали идут сверху вниз.

Добавлено через 1 минуту
Или я туплю и не правильно понял условие.
voral
344 / 324 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
14.07.2011, 08:47     Ищу начинающих программистов! #29
C++
1
2
i = (x<=M) ? x-y : M-y;
j = (x<=M) ? y : (x-M) + y;

stdcout
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;
}
voral
344 / 324 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
14.07.2011, 09:15     Ищу начинающих программистов! #31
упс. Поспешил. Вместо M должно быть M-1 вроде
easybudda
14.07.2011, 09:21
  #32

Не по теме:

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

voral
344 / 324 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
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 минуту
Хех. Видимо ни когда не приходилось мне сталкиваться. Только, что осознал, что у меня с ходу не получается сделать функцию принимающую в качестве аргумента массив (или указатель на таковой). С учетом того, что массивы можгут быть разной заданной размерности.
(Вот как в моем коде выше. По идее вывод диагоналей просится в процедуру - код то один и тот же)
Но вот как?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 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);
voral
344 / 324 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
14.07.2011, 12:34     Ищу начинающих программистов! #35
нет я не осознал что передавать надо &A[0][0]. Пытался через &A сделать
CAHTEXHUK
Заблокирован
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 секунд
смысла нет сначала разыменовывать, а потом брать адресс. Масло маслянное
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 12:56     Ищу начинающих программистов! #37
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
смысла нет сначала разыменовывать, а потом брать адресс. Масло маслянное
нет смысла писать this-> в методах, однако пишут.
так понятнее.
voral
344 / 324 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
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
Пытался решить при помощи количества звездочек в объявлении функции
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1761 / 984 / 60
Регистрация: 29.03.2010
Сообщений: 2,975
14.07.2011, 13:01     Ищу начинающих программистов! #39
эм... а не проще ли
C++
1
PrintDiag(A, N, M);
? или может я чего-то не понимаю в этой жизни...
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 13:03     Ищу начинающих программистов! #40
voral, массивы сделай динамическими и этот вариант заработает, и никаких смещений выщитывать не нужно, оператор [] перегружен уже
Yandex
Объявления
14.07.2011, 13:03     Ищу начинающих программистов!
Закрытая тема Создать тему
Опции темы

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