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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
plemiash
0 / 0 / 0
Регистрация: 13.01.2009
Сообщений: 17
#1

Найти ошибку... - C++

26.01.2009, 22:29. Просмотров 518. Ответов 6
Метки нет (Все метки)

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
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,j,n,m,p=0,o=0,k=0;
    int **mass1;
printf( "vvedite kol-vo strok v matrice\n");
    scanf ("%d", &n);
printf( "vvedite kol-vo stolbcov v matrice\n");
scanf("%d", &m);
    mass1=(int**)malloc(sizeof(int*)*n);
for(i=0;i<m;i++)
mass1[i]=(int*)malloc(sizeof(int)*m+1);
printf ("vvedite elementi  massiva\n");
    for (i=0;i<n;i++){
        for (j=0;j<m;j++)
            scanf ("%d", &mass1[i][j]);
    }
    for (i=0;i<n;i++){
        p=0;
        for (j=0;j<m;j++){    
            if (mass1[j][i]==0)
                p++;
            if (p>k)
                k=i;
        }
    }
    for(i=0;i<n;i++){
        mass1[i][n+1]=mass1[i][k];
        printf ("%d",mass1[i][n+1]); // копия переворачиваемого столбца
    }
    for (i=0,j=n;i<n,j=0;i++,--j){   //цикл переворотв столбца
        mass1[i][k]=mass1[n+1][j];
        }
    printf ("\n\n\n");
    for (i=0;i<n;i++){
        printf ("\n");
        for (j=0;j<m;j++)
            printf ("%d  ", mass1[i][j]);
    }
    return 0;
}
взял условие из Темы: Определить индекс столбца, в котором находится максимальное кол-во нулей. и попробывал написать на С. ток не пойму почему столбец нужный не всегда находится....а переворачивание его не происходит....где ошибка????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2009, 22:29     Найти ошибку...
Посмотрите здесь:

Найти ошибку C++
Найти слова, повторяющиеся более одного раза, не могу найти ошибку C++
C++ Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку)
C++ Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании)
C++ В строках матрицы с отрицательным элементом на главной диагонали найти наибольший из всех элементов (найти ошибку в коде)
C++ Найти сумму первых n-четных натуральных чисел (найти ошибку)
C++ Помогите найти ошибку: По двум сторонам и углу найти все остальное
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.01.2009, 23:56     Найти ошибку... #2
Код
mass1[i]=(int*)malloc(sizeof(int)*m+1);
+1 зачем

Код
mass1[i][n+1]=mass1[i][k];
n у тебя строки, матрица измеряется строки*столбцы
plemiash
0 / 0 / 0
Регистрация: 13.01.2009
Сообщений: 17
27.01.2009, 14:47  [ТС]     Найти ошибку... #3
найденый нужный столбец копируется в столбец m+1, т.е. если n=5 m=5...то мы выделяем память на матрицу 5х6...столбец m+1 для хранения копии искомого стобца с нулями....и с его помощью я хочу перевернуть искомый столбец
Код
 for (i=0,j=n;i<n,j=0;i++,--j){    
        mass1[i][k]=mass1[j][n+1];  
        }
я подпраивл чуть:
mass1[i][k]=mass1[j][n+1]
но всё равно не работает
YurA_280784
Заблокирован
27.01.2009, 14:52     Найти ошибку... #4
Plemiash, лови
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
#include <stdio.h>   
#include <stdlib.h>
#include <conio.h>//содержит прототип getch()   
 
int main()   
{   
    int i,j,n,m,p=0,o=0,k=0;   
       
    printf( "vvedite kol-vo strok v matrice\n");   
    scanf ("%d", &n);   
    printf( "vvedite kol-vo stolbcov v matrice\n");   
    scanf("%d", &m);   
    int **mass1 =   (int**)malloc(sizeof(int)*n);
    
    printf ("vvedite elementi massiva\n"); 
    for(i = 0;i < m;i++)   
    {
        mass1[i]=(int*)malloc(sizeof(int)*m); 
        for (j = 0;j < m;j++)  
        {
            printf ("mass[%d][%d] = ",i,j);
            scanf ("%d", &mass1[i][j]);
        }
    }
    printf ("\r\n%s\r\n","Ishodnaya matrica do perevorota stolbca");     
    for( i = 0; i < n; i++)
    {
        for( j = 0; j < m; j++)
            printf("%d",mass1[i][j]);
        printf("\r\n");
    }
    
    for (j = 0;j < m; j++)
    {   
        p=0;   
        for (i=0;i<n;i++)
        {       
            if (mass1[i][j]==0)   
                p++;   
            if (k < p)   
                k = j;   
        }   
    }   
    printf ("\r\n%s\r\n","Copiya perevorachivaemogo stolbca");
    for(i = 0;i < n;i++)     
        printf ("%d",mass1[i][k]); // копия переворачиваемого столбца     
 
    for(i = 0;i < n / 2;i++) 
    {
        p = mass1[i][k];
        mass1[i][k] = mass1[n - i - 1][k];
        mass1[n - i - 1][k] = p;
    }
    printf ("\r\n%s\r\n","Ishodnaya matrica posle perevorota stolbca");     
    for( i = 0; i < n; i++)
    {
        for( j = 0; j < m; j++)
            printf("%d",mass1[i][j]);
        printf("\r\n");
    }
    getch();
    return 0;   
}
Миниатюры
Найти ошибку...  
Вложения
Тип файла: rar tst4.exe.rar (15.0 Кб, 7 просмотров)
Тип файла: rar tst4.cpp.rar (612 байт, 8 просмотров)
YurA_280784
Заблокирован
27.01.2009, 14:56     Найти ошибку... #5
Если у тебя массив [n]x[m], то в нём элементы могут иметь индексы
в строках от 0...n-1
в столбцах от 0...m-1
Вобщем погляди tst4.cpp.rar - исходник кода и tst4.exe.rar - экзешник, вроде всё чики пики, ну и скриншот работы проги можешь посмотреть.
Если всё ок не забываем про СПС
plemiash
0 / 0 / 0
Регистрация: 13.01.2009
Сообщений: 17
27.01.2009, 15:12  [ТС]     Найти ошибку... #6
я понял в чём дело ...просто я не правильно реализовал этот дополнительный столбец для копии.....надо было всё проще сделать.....спс
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2009, 01:30     Найти ошибку...
Еще ссылки по теме:

C++ Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку
C++ Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде)
C++ Найти ошибку
Найти ошибку в программе: в visual studio выдает ошибку C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.01.2009, 01:30     Найти ошибку... #7
Код
я подпраивл чуть:
    mass1[i][k]=mass1[j][n+1]
но всё равно не работает
n - отвечает за строки, ставить его можно только в первый индекс, иначе теряется связь с участком

Код
    printf( "vvedite kol-vo strok v matrice\n");  
    scanf ("%d", &n);
матрица должна быть матрицей, сложный код сложно переделывать или просто расширять, когда тебе не нужен будет допольнительный столбец матрица останется и он будет болтаться на протяжении всей дальнейшей программы, потому что чтобы от него избавиться надо пересобирать матрицу
Yandex
Объявления
28.01.2009, 01:30     Найти ошибку...
Ответ Создать тему
Опции темы

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