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

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

Восстановить пароль Регистрация
 
непрограммист
 Аватар для непрограммист
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
11.03.2010, 01:47     Ошибка в двумерных массивах #1
Пишет ошибку Run-Time Check Failure #2 - Stack around the variable 'mas2' was corrupted.

Задание:Сформировать двумерный массив A(4,3) по правилу A(i,j)=sin(i+j/2).Определить наименьший элемент в каждой строке массива и записать его в соответствующий элемент одномерного массива B. Вывести массив B.

Код:
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
int  123()
{
    
    cout <<"Сформировать двумерный массив A(4,3) по правилу A(i,j)=sin(i+j/2).Определить наименьший элемент в каждой строке массива и записать его в соответствующий элемент одномерного массива B. Вывести массив B."<<endl;
   int i;
   int j;
   int h;
   int p;
   double k;
   double c;
   double a;
   //int str;
   //int st;
    //cout<<"Задайте кол-во строк массива"<<endl;
    //cin>> str;
    //cout<<"Задайте кол-во столбцов массива"<<endl;
    //cin>> st;
    double mas1[4][3];
    double mas2[4];
cout << "Заполнение массива"<<endl;
 
   for(i=0, h=-1; i<4, h<4; i++,h++) 
   {
        for(j=0, p=-1; j<3, p<3; j++, p++) 
        {
    //cout<<"Введите элемент массива("<<i<<").("<<j<<")"<<endl;
    //cin>>
            k=i;
            c=j;
            a=sin(k+c/2);
            mas1[i][j]=a;
            cout<<"Элемент массива ("<<i<<").("<<j<<")"<<"    ===    "<<setw(10)<<mas1[i][j]<<setw(10)<<endl;
            if (mas1[i][j]<mas1[i+1][j+1])
            {
            mas2[i]=mas1[i][j];
            }
        }
    
    }
for(i=0; i<4; i++) 
   cout<<"Элемент массива 2 ("<<i<<")    ===    "<<setw(10)<<mas2[i]<<setw(10)<<endl;
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 01:47     Ошибка в двумерных массивах
Посмотрите здесь:

C++ Функции в массивах
C++ функции в массивах.
C++ max в одномерных массивах
C++ снова о массивах
C++ последовательности в массивах
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2010, 02:07     Ошибка в двумерных массивах #2
Цитата Сообщение от непрограммист Посмотреть сообщение
C++
1
int *123()
Что это такое? Откройте любую книгу по любому языку программирования(пусть даже ассемблер, там тоже это есть) и прочтите полностью первую главу, сразу после предисловия. Как прочитаете - выложите переделанный вариант. Потом продолжим обсуждение этой ошибки
непрограммист
 Аватар для непрограммист
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
11.03.2010, 11:04  [ТС]     Ошибка в двумерных массивах #3
это маленький кусок программы и я позже вызываю эту часть. и так все работает но только второй массив не получается найти вот я и спрашиваю здесь..
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.03.2010, 11:12     Ошибка в двумерных массивах #4
Цитата Сообщение от непрограммист Посмотреть сообщение
и так все работает
Да оно так даже не скомпилируется!
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int 123(){
    std::cout << "Helo from there!" << std::endl;
    return 123;
}
 
int main(){
    std::cout << "Calling 123: " << 123() << std::endl;
    return 0;
}
Код
andrew@dlinux:~/cpp/shit$ g++ -o int123 int123.cpp
int123.cpp:3: error: expected unqualified-id before numeric constant
int123.cpp: In function ‘int main()’:
int123.cpp:9: error: ‘123’ cannot be used as a function
andrew@dlinux:~/cpp/shit$
User1990
26 / 26 / 2
Регистрация: 03.11.2009
Сообщений: 158
11.03.2010, 11:17     Ошибка в двумерных массивах #5
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
#include "stdafx.h"
#include<stdlib.h>
#include<time.h>
#include<math.h>
 
int const m=4;
int const n=3;
 
int main()
{float a[m][n],b[m],min,c,k;
int i,j;
//srand((unsigned) time(NULL)); 
for (i=0;i<m;i++){
c=  i;
    for(j=0;j<n;j++)
{k=j;
    a[i][j]=sin(c+k/2);//(rand()%100)-50;
printf("%.2f  ",a[i][j]);}
printf("\n");}
for (i=0;i<m;i++)
{min=a[i][0];
    for(j=1;j<n;j++)
    {
if (min>a[i][j]) min=a[i][j];
    }   
b[i]=min;}
printf("\n");
for (i=0;i<m;i++)
printf("%.2f  ",b[i]);
return 0;
}
непрограммист
 Аватар для непрограммист
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
11.03.2010, 12:08  [ТС]     Ошибка в двумерных массивах #6
Огромное спасибо
User1990, все работает!!
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2010, 12:18     Ошибка в двумерных массивах #7
Цитата Сообщение от непрограммист Посмотреть сообщение
это маленький кусок программы и я позже вызываю эту часть
Спасибо, но поверьте, я знаю что такое функции. Я говорил вообще-то о другом
Вот что вы должны были прочитать в первой главе любой книги по программированию
Имена

Для символического обозначения величин, имен функций и т.п. используются имена или идентификаторы.

Идентификаторы в языке Си++ – это последовательность знаков, начинающаяся с буквы или знака подчеркивания. В идентификаторах можно использовать заглавные и строчные латинские буквы, цифры и знак подчеркивания. Длина идентификаторов произвольная. Примеры правильных идентификаторов:

abc A12 NameOfPerson BYTES_PER_WORD

Отметим, что abc и Abc – два разных идентификатора, т.е. заглавные и строчные буквы различаются.
Примеры неправильных идентификаторов:

12X a-b


источник intuit.ru
Liebe
...
 Аватар для Liebe
891 / 74 / 5
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
11.03.2010, 15:21     Ошибка в двумерных массивах #8
Цитата Сообщение от непрограммист Посмотреть сообщение
это маленький кусок программы и я позже вызываю эту часть. и так все работает но только второй массив не получается найти вот я и спрашиваю здесь..
у меня лично по поводу второго массива ошибок никаких нет. Зато вылетает прога из-за того, что вы пытаетесь обратиться к элементу в mas1, которого нет - превысили размер массива: когда в программе используете строку
C++
1
if (mas1[i][j]<mas1[i+1][j+1])
то перебирать i и j надо не до n и m, где n- число строк в массиве, а m - столбцов (в вашем случае не до 4 (строки) и до 3(столбцы)), а до (n-1) и (m-1) соответственно (то есть у вас до 3 (строки) и до 2(столбцы)), иначе когда, i станет равным 3, а j=2, то обращение к mas1[i+1][j+1] приведет к ошибке, так как mas1[4][3] -не существует.

Ну и сам алгоритм нахождения минимального элемента в строке не верный - но с этим уже помогли, так же как и с "123" ))).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2010, 00:03     Ошибка в двумерных массивах
Еще ссылки по теме:

C++ Перестановки в двумерных массивах
Индексация в массивах c++ C++
C++ Функции в массивах

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

Или воспользуйтесь поиском по форуму:
непрограммист
 Аватар для непрограммист
0 / 0 / 0
Регистрация: 11.03.2010
Сообщений: 5
12.03.2010, 00:03  [ТС]     Ошибка в двумерных массивах #9
всем спасибо за помощь,
User1990, помог, все работает!
а по поводу 123- я копирывал кусок из оргомной проги и написал за 1 секунду название 123 в программе все начинается с буквы. спасибо
Yandex
Объявления
12.03.2010, 00:03     Ошибка в двумерных массивах
Ответ Создать тему
Опции темы

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