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

Обработка двумерных массивов - C++

Восстановить пароль Регистрация
 
Luciferr
 Аватар для Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 03:51     Обработка двумерных массивов #1
Всем доброй ночи.
Решаю задачу по информатике, на обработку двумерных массивов. Программу написал, ошибок нет, но когда начинаю вводить элементы массива, то "Windows прекращает работу программы."
Что делать, где искать ошибку понятия не имею. Подозреваю что в процедуре ввода (кэп) но где конкретно - хз.
Помогите.
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdio.h>
#include <conio.h>
#include <time.h>
 
void vvod  (float** x, int k, int l);
void vivod (float** x, float *y, int k, int l, float *ch);
void obrabotka (float** x, float *y, int k, int l, float v, float nn, float *ch);
 
void main()
{
    int n,m;
    float A[12][15];
    float B[12];
    float verh,niz;
    int i,j;
    float r[2];
    srand(time(NULL));
while (1)
{
    printf("Vvedite chislo strok pri 0 < n <= 12 : \n");
    printf("n ( chislo strok ) = ");
    scanf("%d",&n);
    if ( n > 0 && n <=12) break;
    printf ("\n Oshibka! ");
    printf ("\n Neobhodimo, chtoby` ");
    printf ("0 < n <= 12\n");
}
while (1)
{
    printf("Vvedite chislo stolbcov pri 0 < m <= 15 : \n");
    printf("m ( chislo stolbcov ) = ");
    scanf("%d",&m);
    if ( n > 0 && m <=15) break;
    printf ("\n Oshibka! ");
    printf ("\n Neobhodimo, chtoby` ");
    printf ("0 < m <= 15\n");
}
printf ("Verhnii predel intervala: = ");
scanf("%f",&verh);
printf ("\n Nignii predel intervala = ");
scanf("%f",&niz);
printf ("\n\n\n Vvedite elementi massiva: \n");
// vvod(A,n,m);
for (i=0; i<n; i++)
  for (j=0; j<m; j++)
    {
        A[i][j]=rand()%10000-5000;
        A[i][j]=A[i][j]/100;
    }
    obrabotka(A,B,n,m,verh, niz,r);
    vivod (A,B,n,m,r);
}
void vvod (float** x, int k, int l)
{int i;
int j;
for (i=0; i<k; i++)
 for (j=0; j<l; j++)
 {
  printf ("Element[%d][%d] = ",i+1,j+1);
  scanf("%f", &x[i][j]);
  }
}
void vivod (float** x, float *y, int k, int l, float *ch)
{
    int i,j;
    for (i=0; i<k; i++)
    {
     for (j=0; j<l; j++)
     {
         printf ( "%4.2f\n",x[i][j]);
     }
     printf("\n");
    }
    printf("\n\n\n");
    printf("Vektor:\n");
    for (i=0; i<k; i++)
    printf("%4.2f",y[i]);
    printf("\n\n\n");
    printf("kol-vo edinic = %4.0f",ch[0]);
}
void obrabotka (float** x, float *y, int k, int l, float v, float nn, float *ch)
{
    int i,j;
    float s;
    int z=0;
    for (i=0; i<k; i++)
    {
        s=-1e10;
        for (j=0; j<l;j++)
            if (s<x[i][j])
            s=x[i][j];
        if (s<v && s>nn)
         y[i]=1;
        else y[i]=0;
    }
    for (i=0; i<k; i++)
    {
        if (y[i]=1)
        z=z+1;
    }
ch[0]=z;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 03:51     Обработка двумерных массивов
Посмотрите здесь:

C++ Обработка двумерных массивов
C++ Обработка двумерных массивов
C++ Обработка двумерных массивов
Обработка двумерных массивов. Обработка матриц C++
C++ Обработка двумерных массивов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,713
Записей в блоге: 3
23.11.2012, 04:27     Обработка двумерных массивов #2
Цитата Сообщение от Luciferr Посмотреть сообщение
C++
1
2
3
4
5
6
7
// vvod(A,n,m);
for (i=0; i<n; i++)
  for (j=0; j<m; j++)
    {
        A[i][j]=rand()%10000-5000;
        A[i][j]=A[i][j]/100;
    }
Внешний цикл ничего не делает, просто создаёт локальную int i и пробегаёт её, потому, что фигурные скобки для внешнего цикла потерялись:
C++
1
2
3
4
5
6
7
// vvod(A,n,m);
for (i=0; i<n; i++){
  for (j=0; j<m; j++){
        A[i][j]=rand()%10000-5000;
        A[i][j]=A[i][j]/100;
    }
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11837 / 6816 / 771
Регистрация: 27.09.2012
Сообщений: 16,908
Записей в блоге: 2
Завершенные тесты: 1
23.11.2012, 04:43     Обработка двумерных массивов #3

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Внешний цикл ничего не делает, просто создаёт локальную int i и пробегаёт её, потому, что фигурные скобки для внешнего цикла потерялись:
Там же все нормально. В цикле одна инструкция - внутренний цикл. Скобки нужны, только если инструкций несколько.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main(void)
{
    for(int i=0;i<3;++i)
         for(int j=0;j<3;++j){
             std::cout<<j;
             std::cout<<std::endl;
         }
    return 0;
}



Добавлено через 10 минут
У меня вообще данный код не компилируется из-за того, что массив
C++
1
float A[12][15];
передается в функцию как двойной указатель:
C++
1
float ** x
Luciferr
 Аватар для Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 14:46  [ТС]     Обработка двумерных массивов #4
мне сказали, что чтобы передать двумерный массив в процедуру, то надо именно так. У меня всё компилируется, но при в вводе, как я уже писал, выбивает.

Добавлено через 3 минуты
если что, среда C::B
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 14:56     Обработка двумерных массивов #5
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня вообще данный код не компилируется из-за того, что массив float A[12][15] передается в функцию как двойной указатель:
float ** x
В Code::Blocks у меня из-за этого тоже не компилируется.
Luciferr
 Аватар для Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 15:00  [ТС]     Обработка двумерных массивов #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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdio.h>
#include <conio.h>
#include <time.h>
 
void vvod  (float** x, int k, int l);
void vivod (float** x, float *y, int k, int l, float *ch);
void obrabotka (float** x, float *y, int k, int l, float v, float nn, float *ch);
 
void main()
{
    int n,m;
    float A[12][15];
    float B[12];
    float verh,niz;
    int i,j;
    float r[2];
    srand(time(NULL));
while (1)
{
    printf("Vvedite chislo strok pri 0 < n <= 12 : \n");
    printf("n ( chislo strok ) = ");
    scanf("%d",&n);
    if ( n > 0 && n <=12) break;
    printf ("\n Oshibka! ");
    printf ("\n Neobhodimo, chtoby` ");
    printf ("0 < n <= 12\n");
}
while (1)
{
    printf("Vvedite chislo stolbcov pri 0 < m <= 15 : \n");
    printf("m ( chislo stolbcov ) = ");
    scanf("%d",&m);
    if ( n > 0 && m <=15) break;
    printf ("\n Oshibka! ");
    printf ("\n Neobhodimo, chtoby` ");
    printf ("0 < m <= 15\n");
}
printf ("Verhnii predel intervala: = ");
scanf("%f",&verh);
printf ("\n Nignii predel intervala = ");
scanf("%f",&niz);
printf ("\n\n\n Vvedite elementi massiva: \n");
vvod(A,n,m);
/*for (i=0; i<n; i++)
  for (j=0; j<m; j++)
    {
        A[i][j]=rand()%10000-5000;
        A[i][j]=A[i][j]/100;
    } */
    obrabotka(A,B,n,m,verh, niz,r);
    vivod (A,B,n,m,r);
}
void vvod (float** x, int k, int l)
{int i;
int j;
for (i=0; i<k; i++)
 for (j=0; j<l; j++)
 {
  printf ("Element[%d][%d] = ",i+1,j+1);
  scanf("%f", &x[i][j]);
  }
}
void vivod (float** x, float *y, int k, int l, float *ch)
{
    int i,j;
    for (i=0; i<k; i++)
    {
     for (j=0; j<l; j++)
     {
         printf ( "%4.2f\n",x[i][j]);
     }
     printf("\n");
    }
    printf("\n\n\n");
    printf("Vektor:\n");
    for (i=0; i<k; i++)
    printf("%4.2f",y[i]);
    printf("\n\n\n");
    printf("kol-vo edinic = %4.0f",ch[0]);
}
void obrabotka (float** x, float *y, int k, int l, float v, float nn, float *ch)
{
    int i,j;
    float s;
    int z=0;
    for (i=0; i<k; i++)
    {
        s=-1e10;
        for (j=0; j<l;j++)
            if (s<x[i][j])
            s=x[i][j];
        if (s<v && s>nn)
         y[i]=1;
        else y[i]=0;
    }
    for (i=0; i<k; i++)
    {
        if (y[i]=1)
        z=z+1;
    }
ch[0]=z;
}

на всякий случай. только что откомпилировал.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:06     Обработка двумерных массивов #7
Если так переписать, то вылетов нет:
C++
1
2
3
void vvod  (float x[][15], int k, int l);
void vivod (float x[][15], float *y, int k, int l, float *ch);
void obrabotka (float x[][15], float *y, int k, int l, float v, float nn, float *ch);
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:10     Обработка двумерных массивов #8
Так ваш код у меня компилируется.
Миниатюры
Обработка двумерных массивов  
Luciferr
 Аватар для Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 15:15  [ТС]     Обработка двумерных массивов #9
Спасибо) помогло )
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:16     Обработка двумерных массивов #10
Если добавить: #include <stdlib.h> и написать: int main(), то останутся три ошибки.
Миниатюры
Обработка двумерных массивов  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 15:27     Обработка двумерных массивов
Еще ссылки по теме:

Обработка двумерных массивов C++
Обработка двумерных массивов C++
Обработка двумерных массивов C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:27     Обработка двумерных массивов #11
Цитата Сообщение от Luciferr Посмотреть сообщение
мне сказали, что чтобы передать двумерный массив в процедуру, то надо именно так.
Так передаётся двумерный динамический массив, а у вас статический.
Yandex
Объявления
23.11.2012, 15:27     Обработка двумерных массивов
Ответ Создать тему
Опции темы

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