Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2012, 23:44   #1
dimazak2009
Заблокирован
 
Регистрация: 11.03.2012
Сообщений: 24
Стрелка Дана квадратная матрица А из N элементов. Получить из нее одномерный массив, прочитав ее по строкам.(язык C++)

Дана квадратная матрица А из N элементов. Получить из нее одномерный массив, прочитав ее по строкам.

Код:
#include <stdlib.h>
#include <iostream.h>
#include <math.h>


using namespace std;

int main()
{
    int A[3][3] = {0,1,2,
                             3,4,5,
                             6,7,8};//матрица

int B[9] = {0,0,0,0,0,0,0,0,0};//одномерный массив
int Index = 0;

for(int i=0; i<3;i++)
  for(int y=0;y<3;y++)
{
       B[Index++] = A[i][y];
}
cout << "B= ";
cin.get();
    system("PAUSE");
    return 0;
}
помогите в чём ошибка?не выполняется

Последний раз редактировалось ACE Valery; 17.03.2012 в 16:54.
dimazak2009 вне форума Ответить с цитированием
Старый 16.03.2012, 00:03   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Код абсолютно рабочий.

И почему вам не задать этот вопрос в той теме, откуда взяли этот код?
Ёж птица гордая, пока не пнешь не полетит.

Последний раз редактировалось Ezhuk; 16.03.2012 в 00:06.
Ezhuk вне форума Ответить с цитированием
Старый 16.03.2012, 07:05   #3
sinestro
Пользователь
 
Регистрация: 24.02.2012
Сообщений: 88
По умолчанию

здесь же выход за пределы массива получаеться, ибо сначала int Index = 0; а потом вы пишете B[Index++] = A[i][y]; тоесть приравнивание начинаеться не с нулевого элемента. #include <math.h> здесь для чего??? вы же не используете синусы/косинусы/корни....я бы написал код так:
Код:
#include <stdlib.h>
 #include <iostream.h>

 using namespace std;

 void main()
 {
     int A[3][3] = {0,1,2,
                         3,4,5,
                         6,7,8};//матрица

 int B[9];//одномерный массив
 int Index = 0;

 for(int i=0; i<3;i++)
     for(int y=0;y<3;y++)
     {
         B[Index] = A[i][y];
         Index++;
     }
for(int i=0;i<9;i++)
{
    cout<<В[i];
}
 system("PAUSE");
 }
иногда бывает такое, что программа написана правельно, но компилятор говорит что вы дурак))) в большенстве случаев это происходит изза #include <stdlib.h> или #include <stdafx.h>. поэтому лучше создавать пустой проэкт, добавлять в него СРР файл и в нём уже писать код без этих инклудов. идём дальше)) в задаче написано"Дана квадратная матрица А из N элементов" а это значит что вы не можете знать размер матрицы и её элементы, а значит нужно использовать динамичаское выделение памяти, и код должен выглядеть так:
Код:
#include <stdlib.h>
 #include <iostream.h>

 using namespace std;

 void main()
 {
     int m, n; //размер матрицы
     cout << "Enter m and n:" << endl;
     cin >> m >> n;
     
    int **A = new int* [m];
        for (int i = 0; i < m; i++)
            A[i] = new int [n];
    int *B = new int[m*n];
    
    cout << "Enter elements of array:" << endl; //ввод значений массива  
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                cin >> А[i][j];
 int Index = 0;

 for(int i=0; i<m;i++)
     for(int y=0;y<m;y++)
     {
         B[Index] = A[i][y];
         Index++;
     }
for(int i=0;i<m*n;i++) // вывод на экран дномерного массива
{
    cout<<В[i];
}
 for (int i = 0; i < m; i++)
     delete [] A[i];
 delete [] A;
 delete [] B;
 system("PAUSE");
 }
sinestro вне форума Ответить с цитированием
Старый 16.03.2012, 11:26   #4
dimazak2009
Заблокирован
 
Регистрация: 11.03.2012
Сообщений: 24
По умолчанию

компилирую компилятор выводит ошибку C:\Users\Диметрий\Desktop\Makefile. win [Build Error] [main.o] Error 1
dimazak2009 вне форума Ответить с цитированием
Старый 16.03.2012, 11:27   #5
dimazak2009
Заблокирован
 
Регистрация: 11.03.2012
Сообщений: 24
По умолчанию

Компилятор: Default compiler
Building Makefile: "C:\Users\Диметрий\Desktop\Makefile .win"
Выполнение make...
make.exe -f "C:\Users\Диметрий\Desktop\Makefile .win" all
g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"

In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
from main.cpp:2:
C:/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
main.cpp:7: error: `main' must return `int'

main.cpp: In function `int main(...)':
main.cpp:20: error: stray '\192' in program
main.cpp:20: error: expected primary-expression before '[' token

main.cpp:31: error: stray '\194' in program
main.cpp:31: error: expected primary-expression before '[' token

make.exe: *** [main.o] Error 1

Выполнение завершено
dimazak2009 вне форума Ответить с цитированием
Старый 16.03.2012, 11:44   #6
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

2sinestro
Цитата:
здесь же выход за пределы массива получаеться, ибо сначала int Index = 0; а потом вы пишете B[Index++] = A[i][y]; тоесть приравнивание начинаеться не с нулевого элемента.
Будьте добры, расскажите как выполняется унарная постфиксная операция "++"?

Немного расскажу:
Префиксный оператор (вместо Т тип данных, немного обобщил):
T& T:: operator++()
{
//выполнение инкремента
return *this;
}

Постфиксный оператор:
T T:: operator++(int)
{
T old(*this); //запомнили старое значение
++*this;//вызвали префиксную версию
return old; //вернули старое значение
}

Постфиксная операция "++"- увеличение значения операнда на 1 после его использования
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 16.03.2012 в 12:11.
Krok27 вне форума Ответить с цитированием
Старый 16.03.2012, 14:43   #7
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

sinestro, если программа написано правильно и вы не дурак, то компилятор ошибок не выдаст.
Да и постфиксные от префикса надо бы различать. А то расписали что, я га секунду засомневался...
И по заданию, если на то пошло, дано количество элементов, а не размер квадратной матрицы.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 16.03.2012, 15:35   #8
sinestro
Пользователь
 
Регистрация: 24.02.2012
Сообщений: 88
По умолчанию

точно... эт я сглупил насчёт постфиксов и префиксов...только не бейте меня)))))))а насчёт задачи - тогда ещо проще. там нужно использовать не двухмерный а одномерный массив. и насколько я вижу, dimazak2009 в DEV C++ пишет. не лучше ли в MS VISUAL STUDO это делать?
sinestro вне форума Ответить с цитированием
Старый 16.03.2012, 15:41   #9
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

2sinestro
Будешь наказан, останешься без сладкого.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 17.03.2012, 16:22   #10
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Матрица не может так инициализироваться.
rmv240899 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана квадратная матрица А из N элементов. Получить из нее одномерный массив(язык с++) yury.zanilov Помощь студентам 6 16.03.2012 13:46
Дана квадратная матрица А порядка n. Найдите номер строки матрицы, в которой больше всего единичных элементов. JMS Паскаль, Turbo Pascal, PascalABC.NET 1 13.01.2012 06:50
Дана квадратная матрица А порядка n. Найдите сумму положительных элементов матрицы, стоящих под главной диагональю (Паскаль) Вовик-вовик Помощь студентам 1 10.01.2012 21:48
Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в Хутор Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2010 12:41
Дана квадратная матрица порядка N. Вычислить среднее арифметическое положительных элементов матрицы, Grisha248 Помощь студентам 2 22.05.2009 17:37