Показать полную графическую версию : Помогите с лабораторной работой
Midsummer
12-06-2011, 02:59
Здравствуйте! Помогите написать 3 программмы на C++ на задачи с двумерными массивами
1. Дана матрица размера M x N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, …). Вывод элементов производить по строкам, условный оператор не использовать
2. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1)
3. Дана матрица размера M x N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и M, 2 и M – 1 и т. д.)
Надеюсь на вашу помощь и поддержку :)
не будьте жмотом, заплатите 600 руб
Midsummer, здесь не freelance.
Берите бумагу, рассуждайте вслух, как будут мысли, приходите, поможем перевести их в программный код.
Вывести ее элементы, расположенные в строках с четными номерами »
Как получить четные строки? Как вообще записывается четное число? Формулу приведите, пожалуйста.
Найти среднее арифметическое элементов каждой ее диагонали, параллельной побочной »
По какой формуле считается среднее арифметическое? (Вопрос на засыпку: в чем отличие от среднего геометрического?)
Какой формуле соответствуют положения элементов || побочной диагонали?
Что это вообще такое - побочная диагональ матрицы?
Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы »
Интересно узнать про горизонтальную ось симметрии. В каких случаях она существует, как ее определять в случае четного/нечетного кол-ва строк матрицы?
вот 1-ая задача , но с условным оператором ,написана в VS2010.Если кто знает, подскажите как написать условие то, что бы без условного оператора выводило нужные строки? корявый английский язык можно заменить на русский.
#include "stdafx.h"
#include <iostream>
#include <locale>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
wcout.imbue(locale("rus_rus.866"));
int ** mas ;
int k , i , j , n ;
int c=0;
do
{
wcout << L"Input quantity of backstitches(m) of the matrix(m x n) : ";
cin >> k ;
wcout << L"Input quantity of columns(m) of the matrix(m x n) : ";
cin >> n ;
if ( n<=0 || k<=0 ) wcout << L"Incorrect dimension!!!\n" ;
} while ( n <= 0 || k <= 0 ) ;
mas=new int*[k] ;
for( i=0; i<k; i++ ) { mas[i]=new int[n]; }
for ( i=0 ; i<k ; i++)
{
for( j=0 ; j<n ; j++ )
{
wcout << L"Input element [" << i+1 << L"] [" << j+1 << L"] : " ;
cin >> mas[i][j] ;
}
}
wcout << L"Departure matrix :\n" ;
for ( i=0 ; i<k ; i++)
{
for( j=0 ; j<n ; j++ )
{
wcout << mas[i][j] << "\t" ;
}
wcout << L"\n" ;
}
wcout << L"Lines of matrix with even numbers of backstitches : " ;
for ( i=0 ; i<k ; i++)
{
for( j=0 ; j<n ; j++ )
{
if ( (i+1)%2 == 0 )
wcout << mas[i][j] << "\t" ;
}
wcout << L"\n" ;
}
for( i=0 ; i<k ; i++ )delete[] mas[i] ;
delete[] mas ;
return 0;
}
ему уже все решили
http://www.cyberforum.ru/cpp-beginners/thread318091.html
А я бы те решения не засчитал ... Или засчитал, но с защитой.
Комментариев к коду нет, теоретических выкладок нет.
И вообще сомневаюсь, что они указатели проходили.
Ну, коментарии- минутное дело . А что за теоритические выкладки?)
Ну, коментарии- минутное дело »
Комментарии - писать обязательно, тем более в лабах. Т.к. интересует именно небольшой код сути программы, а не программа + инструментарий. (генераторы матриц, распечатка матриц и т.п.)
А что за теоритические выкладки?) »
Соответствие математических формул программной реализации.
Не с потолка же алгоритмы берутся. Грубо говоря, это ответы на вопросы заданные мною в первом сообщении ^^.
Прежде чем что-то найти, надо знать что искать. В противном случае - это будет чисто случайное совпадение.
Как например генератор случайных величин "чисто случайно" генерирует ключи от программ в сотни $ :)
Спасибо,в следующих моих ответах буду учитывать.
Buchik, for( j=0 ; j<n ; j++ )
{
if ( (i+1)%2 == 0 )
wcout << mas[i][j] << "\t" ;
}
wcout << L"\n" ; »
Наглядный тебе пример. Раз уж здесь разбор полетов начался.
У тебя стоит условие, т.е. уже потеря в две/три команды ассемблера, без учета суммирования в скобках (а это еще несколько команд, при "лобовой" реализации), и без учета деления. А деление "в лоб" без оптимизацией - еще ряд "бестолковых" тактов ЦП.
Меж тем, отвечая на вопрос: Как вообще записывается четное число? »
Формула четного числа : 2N. Умножение само по себе - относительно дорогая операция. Однако здесь идет умножение на два, что в двоичной системе может быть приравнено к сдвигу влево на 1 разряд. Сдвиг - это "логика", логические операции выполняются быстрее всего.
Вот и получается, что вместо множеств проверок и лишней работы ЦП, можно сразу определить делением (по сути двоичным сдвигом вправо на 1 разряд) кол-во четных строк, и получать следующую четную строку сдвигом вправо переменной счетчика.
Другое оптимизационное решение - делать двойной инкремент переменной счетчика (оптимизированное i:=i+2 == inc i, 2), т.к. операция инкремент - это одна достаточно "легкая" инструкция ЦП.
Возможность использования практически прямых указаний для ЦП зависит от реализации компилятора/интерпретатора языка.
тоесть мне надо было написать что-то на подобии такого?
for ( i=1 ; i<k ; i=i+2 )
{
for( j=0 ; j<n ; j++ )
{
wcout << mas[i][j] << "\t" ;
}
wcout << L"\n" ;
}
или как ты написал inc i, 2 ? вместо i=i+2?
или как ты написал inc i, 2 ? вместо i=i+2? »
на такие вопросы я не отвечаю :) Все было сказано ранее.
Единственное что могу сказать - код не верен, четные строки матрицы он не печатает.
плохо ты видиш мой код. вот тебе дебуг, всё прекрасно работает
ммм, вот оно что. У тебя используется матрица [m+1, n+1]. Т.е. есть ряд не присвоенных значений, что однако позволяет избежать ряда ошибок при работе с малыми матрицами.
А ну ка если ... так и есть. 65535 - вылет.
lxa85, Тоесть, когда вводиш число превышающее значение int то вылетают ошибки??А как тогда это исправить?
А как тогда это исправить? »
:dont-know :)
Верней знаю, но не скажу. Если у тебя идет объявление переменной через int, а максимальный int задать нельзя, в документации пояснений данной ситуации нет, то это баг, а вовсе не фича. :)
Значит неверен алгоритм, использующий заведомо бОльшие ресурсы, чем требуется.
Верней знаю, но не скажу. »
А чего так?)
Buchik, а это скучно, банально и не интересно. :)
Я тебе показал ошибку, если ли я же ее и исправлю, эффекта будет ноль.
А вот если ты са-а-ам, то это совсем другое дело. Тогда ты сразу "Молодец", подумал, нашел решение, исправил ошибку, и все САМ! :) Ну разве не красота?
Т.ч. давай, думай и решай.
P.S. Хауса смотрел? Последняя серия 7ого сезона.
Афсун: Вы на самом деле хотите закончить сейчас?
:)
P.S. Хауса смотрел? Последняя серия 7ого сезона.
Афсун: Вы на самом деле хотите закончить сейчас? »
Буть по твоему) просто я полностью все лабораторные свои так писал с масивами которые)Завтра поищу информации по этому пунктику...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.