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

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

Войти
Регистрация
Восстановить пароль
 
Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
#1

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

23.11.2012, 03:51. Просмотров 660. Ответов 10
Метки нет (Все метки)

Всем доброй ночи.
Решаю задачу по информатике, на обработку двумерных массивов. Программу написал, ошибок нет, но когда начинаю вводить элементы массива, то "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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 03:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка двумерных массивов (C++):

Обработка двумерных массивов функциями - C++
Каждый пункт задания оформить в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Ввод-вывод...

Обработка двумерных массивов. Указатели - C++
Найти наименьший элемент матрицы X (mn) и записать нули в ту строку и столбец, где он находится.

Обработка двумерных массивов. Указатели. - C++
Лабораторная работа №5 Обработка двумерных массивов. Указатели. Цель работы: изучение способов описания, ввода-вывода и обработки...

Обработка двумерных динамических массивов - C++
Помогите написать программу Даны два двумерных динамических массива одинакового размера. Создать третий динамический массив содержащий...

Обработка двумерных массивов. Указатели. - C++
помогите сделать. буду благодарен с алгоритмами(блок-схемами)

Обработка двумерных массивов данных - C++
Из произвольно заданной матрицы размера 5*5 сформировать построчный одномерный массив из положительных элементов исходной матрицы. Помогите...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6472 / 3120 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
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;
    }
}
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 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
0
Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 14:46  [ТС] #4
мне сказали, что чтобы передать двумерный массив в процедуру, то надо именно так. У меня всё компилируется, но при в вводе, как я уже писал, выбивает.

Добавлено через 3 минуты
если что, среда C::B
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 14:56 #5
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня вообще данный код не компилируется из-за того, что массив float A[12][15] передается в функцию как двойной указатель:
float ** x
В Code::Blocks у меня из-за этого тоже не компилируется.
0
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;
}

на всякий случай. только что откомпилировал.
0
alsav22
5420 / 4816 / 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);
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:10 #8
Так ваш код у меня компилируется.
0
Миниатюры
Обработка двумерных массивов  
Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 15:15  [ТС] #9
Спасибо) помогло )
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:16 #10
Если добавить: #include <stdlib.h> и написать: int main(), то останутся три ошибки.
0
Миниатюры
Обработка двумерных массивов  
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:27 #11
Цитата Сообщение от Luciferr Посмотреть сообщение
мне сказали, что чтобы передать двумерный массив в процедуру, то надо именно так.
Так передаётся двумерный динамический массив, а у вас статический.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 15:27
Привет! Вот еще темы с ответами:

Строки(обработка двумерных массивов) - C++
Ребят помогите пожалуйста есть задачка: В строке из 50 символов отдельные слова разделены пробелом. Упорядочить строку так, чтобы каждое...

Обработка двумерных динамических массивов - C++
1. Составить программу в которой для введенного пользователем двумерного массива, выводится сумма всех четных чисел 2. Составить...

Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? - C++
Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? И почему такая вот запись является &quot;чуть&quot;...

Обработка двумерных массивов (Вычислить матрицу D, равную произведению элементов матрицы М на константу.) - C++
Дана матрица М (4 5) и константа С. Вычислить матрицу D, равную произведению элементов матрицы М на константу. Помогите плиз))


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.11.2012, 15:27
Ответ Создать тему
Опции темы

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