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

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

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

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

23.11.2012, 03:51. Просмотров 650. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 03:51     Обработка двумерных массивов
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,486
Записей в блоге: 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;
    }
}
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 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
Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 14:46  [ТС]     Обработка двумерных массивов #4
мне сказали, что чтобы передать двумерный массив в процедуру, то надо именно так. У меня всё компилируется, но при в вводе, как я уже писал, выбивает.

Добавлено через 3 минуты
если что, среда C::B
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 14:56     Обработка двумерных массивов #5
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня вообще данный код не компилируется из-за того, что массив float A[12][15] передается в функцию как двойной указатель:
float ** x
В Code::Blocks у меня из-за этого тоже не компилируется.
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
5416 / 4812 / 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.11.2012, 15:10     Обработка двумерных массивов #8
Так ваш код у меня компилируется.
Миниатюры
Обработка двумерных массивов  
Luciferr
12 / 12 / 1
Регистрация: 08.09.2010
Сообщений: 130
23.11.2012, 15:15  [ТС]     Обработка двумерных массивов #9
Спасибо) помогло )
alsav22
5416 / 4812 / 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     Обработка двумерных массивов
Еще ссылки по теме:

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

Разность двумерных массивов - C++
Добрый день! Недавно я начал изучать С++, а до этого писал на делфи! Задали мне написать функцию, которая должна на входу принимать...

Использование двумерных массивов - C++
вроде компилируется, но когда программа загружается, то она выбивает, пишет остановка #include &lt;iostream&gt; using namespace std; main...

CUDA: сложение двумерных массивов - C++
Я новичок, как в CUDA, так и в С++. Задача - сложить два одинаковых массива, число строк и столбцов задается с клавиатуры. Я чувствую,...

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


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

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

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