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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 15:03   #1
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию Требуется помощь по двумерным массивам в C++ builder 2006.

Нужно решить задачку и написать объяснение, что бы я понял. Нам в институте сказали, что вы в школе должны были изучать C++, но проблема в том, что в школе нас не обучали ему. Если несложно, подскажите нормальный самоучитель или ссылки с материалом, чтобы новичок смог понять Borland C++ builder 2006. Денег нет. Я бедный студент.

Задача из методички:
Разработать функцию, позволяющую инвертировать каждый столбец двумерного массива целых чисел. Обработать два масива. Результат вывести на печать.


Для себя(хотелось бы понять, как делать.:
Разработать функции, которая меняет местами содержимое старшего и младшего байтов каждого элемента двумерного массива. Ввести два двумерных массива разной длины.

Последний раз редактировалось Vergil; 10.11.2009 в 07:39.
Vergil вне форума Ответить с цитированием
Старый 09.11.2009, 15:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рискну предложить такое на Борланд Си:
Код:
//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
 int a[5][5],e; // Это массив и временная переменная
 for (int i = 0; i < 5; i++) { // В циклах пройдем по элементам
  for (int j = 0; j < 5 ; j++) {
	a[i][j]=random(500);   // Присваиваем массиву значение
	cout<<a[i][j]<<'=';// Выведем на экран что присвоили
	e=a[i][j]; // Во временную переменку пихнем это
			 asm{ // Меняем содержимое старшего и младшего байтов
			  mov ax,word [e] // Из временной переменки
			  xchg al,ah // Вот этак команда ассемблера меняет
			  mov word [e],ax // Вертаем взад временной переменке
			 };
   a[i][j]=e;// и записываем назад в массив поменяное
   // Выводим поменяное
   cout<<a[i][j]<<'\t';
  }
  cout<<'\n';
  }
 system("PAUSE");
	return 0;
}
//---------------------------------------------------------------------------
Смысл ясен или пояснить?

Цитата:
что вы в школе должны были изучать C++
Ну да... У нас же каждая школа хакеров для Микрософт готовит...
I'm learning to live...

Последний раз редактировалось Stilet; 09.11.2009 в 16:39.
Stilet вне форума Ответить с цитированием
Старый 09.11.2009, 16:25   #3
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Смысл ясен или пояснить?

Лучше пояснить. Я борланде вообще почти не шарю. А как ввести два двумерных массива разной длины? Или где это в коде? Если честно, я даже не совсем задание понимаю. Вы случайно не знаете хороших, простых и доступных самоучителей?

Ну да... У нас же каждая школа хакеров для Микрософт готовит...
Vergil вне форума Ответить с цитированием
Старый 09.11.2009, 16:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или где это в коде?
Ну можно и не в коде, но я не настолько си знаю. Но можно так:
Код:
a[Число строк][Число колонок]
 for (int i = 0; i < Число строк; i++) {
  for (int j = 0; j < Число колонок ; j++) {
Цитата:
Вы случайно не знаете хороших, простых и доступных самоучителей?
Как сказать то... Они все хорошие если вдумчиво и усидчиво читать...
Как по мне любой учебник по Си годится.
Цитата:
Лучше пояснить.
Я подредактировал свой пост.
I'm learning to live...

Последний раз редактировалось Stilet; 09.11.2009 в 16:39.
Stilet вне форума Ответить с цитированием
Старый 09.11.2009, 17:25   #5
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Спасибо. Буду разбираться.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
a[Число строк][Число колонок]
 for (int i = 0; i < Число строк; i++) {
  for (int j = 0; j < Число колонок ; j++) {
Что-то не получилось. А вообще реально ввести массив произвольной длины(которую ты задашь)??

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

В общем, то реально, если памяти хватит. На какую тему у Вас задачи? Динамические массивы или просто массивы?
Код:
Borland C++ builder 2006
- это среда разработки, в ней могут создаваться как консольные приложения (это проще) так и Windows.
Для Windows мне понравился А.Я.Анхаргельский и М.А. Тагин "Программирование в C++Builder 6 и 2006". Поищите. А так любая книга по С++.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 10.11.2009, 07:37   #7
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Ребят, извините. Подошел к препадавателю, что бы спросить, как делать, а она мне сказала, что дала не тот вариант.
Разработать функцию, позволяющую инвертировать каждый столбец двумерного массива целых чисел. Обработать два масива. Результат вывести на печать.

Если я правельно понял, то нужно сделать функцию, которая проведет действия с двумя массивами, но что значит инвертировать столбец?

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

А.Я.Анхаргельский
Нашел Архангельский это то?

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

Цитата:
а она мне сказала, что дала не тот вариант.
))))))))))))))))) Кино и немцы...

Вообще слово инвертировать значит обратить в противоположное...
Может имелось ввиду арифметическое отрицание:
Код:
a[i][j]=~a[i][j];
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.11.2009, 12:45   #9
Vergil
Пользователь
 
Аватар для Vergil
 
Регистрация: 09.11.2009
Сообщений: 19
По умолчанию

Почему, если я пытаюсь вывести одномерный массив он его нормально выводит на дисплей, а ежели двумерный, то он какую-то фигню выводит. Например, я прошу его вывести мне первый элемент (он равен 13), он выводит 4097?
Вроде как Инвертировать - значит, что последний элемент должен стать первым, и т.д. То есть
|1 2 3| -> |7 8 9|
|4 5 6| -> |4 5 6|
|7 8 9| -> |1 2 3|

Правда, что у матрицы в C++ вначале идут столбцы, а потом строки?

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

Тогда так:
Код:
 for (int j = Число колонок-1; j>=0; j++) и выводим на экран...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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