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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 10:47   #11
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Почти написал. Исправте, если есть ошибки. Если нужно могу объяснить.

Код:
//---------------------------------------------------------------------------
#include<stdio.h>
#include <iostream.h>
#include <windows.h>
#include <winuser.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
char* rus(const char* text)
{
 char *bufRus=new char[strlen(text)];
 CharToOem(text, bufRus);
 return bufRus;
}

int main(int argc, char* argv[])
{int a, b, i, j, n, c, g;
cout<<rus("Введите количество массивов")<<endl;
cin>>n;
for(g=0; g<n; g++)
{
int v[100][100];
cout<<rus("Введите количество строк")<<endl;
cin>>a;
cout<< rus("Введите количество столбцов")<<endl;
cin>>b;
if (a>1 && b>1) {
c=a-1;
int maxP=a;
int maxL=b;
for(i=0;i<maxP;i++)
{for (j=0; j<maxL;j++)
{printf("\n x [%d][%d] ", i, j );// cout<<"\n x ["<< i<<"]["<<j<<"] ";
scanf("%d",&(v[i][j])); //cin>>v[i][j];
 } }
cout<<rus("Исходная матрица")<<endl;
for(int i=0;i<a;++i)
{for(int j=0;j<b;++j)
cout<<v[i][j]<<" ";
cout<<endl;}
int m[100][100];
for(int i=0; i<a; i++)
{for(int j=0; j<b; j++)
{m[ i ][j]=v[c-i][j];}}
for (int i=0; i<a; i++)
{for(int j=0; j<b; j++)
v[ i ][j]=m [ i ][j];}
cout<<rus("Матрица с инвертированными столбцами")<<endl;
for(int i=0;i<a;++i)
{for(int j=0;j<b;++j)
cout<<m[i][j]<<" ";
cout<<endl;}}
else {cout<<rus("Матриц 0X0 и 1X1 не существует")<<endl;}
cout<<endl;}
system("pause");
	return 0;
}
//---------------------------------------------------------------------------

Последний раз редактировалось Vergil; 11.11.2009 в 17:24.
Vergil вне форума Ответить с цитированием
Старый 11.11.2009, 12:49   #12
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Проверила на работоспособность в консольном режиме, то что было до Вашей коррекции. Немного подредактировала.
В таком варианте можно вводить матрицу начиная от 0х0 до 100х100
инвертированная матрица только 3х3. Т.к
Код:
int m[3][3];
, то
Код:
j<3 и i<3
По поводу темы
Код:
Правила использования директив препроцессора
. Посмотрите что это такое.
Код:
//-------------------------------------------------------------------------
#include<stdio.h>
#include <iostream.h>
#pragma hdrstop

//-------------------------------------------------------------------------

#pragma argsused

int main(int argc, char* argv[])
{int a, b, i, j;
int v[100][100];
cout<< "Vvedite colichestvo strok"<<endl;
cin>>a;
cout<< "Vvedite colichestvo stolbcov("<<endl;
cin>>b;
int maxP=a;
int maxL=b;
for(i=0;i<maxP;i++)
{
 for (j=0; j<maxL;j++)
 {
 printf(" Element matricy [%d][%d] ", i, j );
 scanf("%d",&(v[i][j]));
 }
}
 cout<<"Ishodnaya matrica"<<endl;
 for(int i=0;i<a;++i)
{
 for(int j=0;j<b;++j)
 cout<<v[i][j]<<" ";
 cout<<endl;
}
 int m[3][3];
 for(int i=0; i<3; i++)
{
 for(int j=0; j<3; j++)
 m[i][j]=v[2-i][j];
}
for (int i=0; i<3; i++)
{
 for(int j=0; j<3; j++)
 v[i][j]=m[i][j];
 }
cout<<"Matrica s invertirovannimi stolbcami"<<endl;
for(int i=0;i<3;++i)
{
for(int j=0;j<3;++j)
cout<<m[i][j]<<" ";
cout<<endl;}
system("pause");
return 0;
}
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 11.11.2009 в 13:01.
Sweta вне форума Ответить с цитированием
Старый 11.11.2009, 14:00   #13
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Почему всем нравится printf/scanf? Ведь cout/cin легче.
Сейчас мучаюсь с выводом на печать.

Sweta, не могли бы вы поподробней в чем ошибка, а то я еще новичек и просто указание на место еще не понимаю. Точнее я не вижу ошибки из-за своего непрофессионализма.
Что может значить поставить символ пробел в старшем байте каждого слова массива?

а про массивы мне понравилось, как тут написанно http://server.179.ru/tasks/cpp/arrays3.html

Последний раз редактировалось Vergil; 11.11.2009 в 16:32.
Vergil вне форума Ответить с цитированием
Старый 11.11.2009, 16:37   #14
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
Что может значить поставить символ пробел в старшем байте каждого слова массива?
К чему это?
Я ведь написала, что Ваша программа работает. Какие у Вас вопросы с выводом на печать?
Кроме того, не знаю существенно для Вашего преподавателя или нет
проверка значений a и b. Ведь матриц размером 0х0, 1х1 не существует.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 11.11.2009, 16:57   #15
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Какие у Вас вопросы с выводом на печать?
Как вообще можно вывести на печать? С помощью какого оператора?

проверка значений a и b.
Об этом как-то даже не подумал. Все. Отредактировал. Но вы уверены, что матрицы 1X1 не существует? Такую фразу нашел в инете "сложение/вычитание с числом (если матрица 1х1)".

К чему это?
Друг попросил объяснить ему как это сделать. Но не он не я не понимаем этого условия.

Последний раз редактировалось Vergil; 11.11.2009 в 17:35.
Vergil вне форума Ответить с цитированием
Старый 11.11.2009, 17:02   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как вообще можно вывести на печать?
На принтер что ли?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2009, 17:23   #17
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вот часть для Вашей программы, создающая динамический массив, т.е Вы сможете создать массив произвольного задавая N и M
Код:
int **matrix, N=0, M=0;
int i,j;
while(N<2 ||M<2)
{
	printf("N=");
	scanf("%d",&N);
	printf("M=");
	scanf("%d",&M);
}
	/*Создание динамического массива*/
	matrix=new int*[N]; /*Выделение памяти под массив указателей из N элементов */
	for(i=0;i<N;i++)
	matrix[i]=new int[M]; /*Выделяем память под новый массив из M элементов */

	/*Ввод массива*/
	for(i=0;i<N;i++)
	{
        for(j=0;j<M;j++)
	scanf("%d",&matrix[i][j]);
	}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 11.11.2009, 17:38   #18
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

На принтер что ли?
Да.
Вот часть для Вашей программы, создающая динамический массив, т.е Вы сможете создать массив произвольного задавая N и M
ОГО. Спасибо огромное. Сейчас буду разбираться в нем.
Код:
//---------------------------------------------------------------------------
#include<stdio.h>
#include <iostream.h>
#include <windows.h>
#include <winuser.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
char* rus(const char* text)
{
 char *bufRus=new char[strlen(text)];
 CharToOem(text, bufRus);
 return bufRus;
}

int main(int argc, char* argv[])
{int **matrix, N=0, M=0;
int **matrix1;
int i,j, c, n, g;
cout<<rus("Введите количество массивов: ");
cin>>n;
for(g=0; g<n; g++)
{
{
	printf(rus("Количество строк= "));
	scanf("%d",&N);
	printf(rus("Количество столбцов= "));
	scanf("%d",&M);
}
if (N>1 && M>1) {
 c=N-1;
	/*Создание динамического массива*/
	matrix=new int*[N]; /*Выделение памяти под массив указателей из N элементов */
	for(i=0;i<N;i++)
	matrix[i]=new int[M]; /*Выделяем память под новый массив из M элементов */

	/*Ввод массива*/
	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
	{printf("\n x [%d][%d] ", i, j );
	scanf("%d",&matrix[i][j]);}
	}
cout<<rus("Исходная матрица")<<endl;
for(int i=0;i<N;++i)
{for(int j=0;j<M;++j)
cout<<matrix[i][j]<<" ";
cout<<endl;}
matrix1=new int*[N];
	for(i=0;i<N;i++)
	matrix1[i]=new int[M];
for(int i=0; i<N; i++)
{for(int j=0; j<M; j++)
{matrix1[ i ][j]=matrix[c-i][j];}}
for (int i=0; i<N; i++)
{for(int j=0; j<M; j++)
matrix[ i ][j]=matrix1 [ i ][j];}
cout<<rus("Матрица с инвертированными столбцами")<<endl;
for(int i=0;i<N;++i)
{for(int j=0;j<M;++j)
cout<<matrix1[i][j]<<" ";
cout<<endl;}}
else{
if (N<=0 || M<=0) {cout<<rus("Матриц ")<<N<<("X")<<M<<rus(" не существует")<<endl; }
else {cout<<rus("Данная матрица не двумерный массив")<<endl;}}
cout<<endl;}
system("pause");
	return 0;
}
//---------------------------------------------------------------------------
То, что у меня получилось. Так? Сейчас родители гонят спать, так что ответить смогу только часов через 13(после института).
while(N<2 ||M<2)
А тут точно While должно быть? То есть, если человек будит вводить 1 и 1, то у него появится опять вести N и M.

Последний раз редактировалось Vergil; 12.11.2009 в 13:32.
Vergil вне форума Ответить с цитированием
Старый 11.11.2009, 17:43   #19
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
Почему всем нравится printf/scanf? Ведь cout/cin легче.
Наверное привычка из Си.

Да, до тех пор пока не введет правильно. Если быть более последовательным, то человеку надо бы сообщить, что значения д.б больше 2. В принципе можете заменить все printf/scanf на cout/cin, если у Вас С++.
Где используется?
Код:
c=N-1;
Это уже не нужно, ведь создан массив NxM
Код:
int matrix1[100][100];
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Stilet; 12.11.2009 в 15:51.
Sweta вне форума Ответить с цитированием
Старый 11.11.2009, 18:24   #20
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Код:
c=N-1;
Это используем при инвертирование.

int matrix1[100][100];
Тоже при инвертации матрицы. Matrix переворачиваем в matrix1. Просто меня выгоняют из-за компа и некогда было обдумать на что заменить эту часть.
Vergil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по двумерным массивам(Паскаль) pupik100 Помощь студентам 19 26.10.2009 16:11
помогите где можно скачать триальную версию BDS 2006, Delphi 2006 или С++Builder. gennad_ugryumov Софт 3 28.01.2009 18:00
Программа по двумерным массивам! Elmander Помощь студентам 9 22.06.2007 14:32