Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите с лабораторной работой (http://forum.oszone.net/showthread.php?t=208784)

Midsummer 12-06-2011 02:59 1692940

Помогите с лабораторной работой
 
Здравствуйте! Помогите написать 3 программмы на C++ на задачи с двумерными массивами

1. Дана матрица размера M x N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, …). Вывод элементов производить по строкам, условный оператор не использовать
2. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1)
3. Дана матрица размера M x N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и M, 2 и M – 1 и т. д.)
Надеюсь на вашу помощь и поддержку :)

ferget 12-06-2011 03:17 1692942

не будьте жмотом, заплатите 600 руб

lxa85 12-06-2011 11:12 1693023

Midsummer, здесь не freelance.
Берите бумагу, рассуждайте вслух, как будут мысли, приходите, поможем перевести их в программный код.
Цитата:

Цитата Midsummer
Вывести ее элементы, расположенные в строках с четными номерами »

Как получить четные строки? Как вообще записывается четное число? Формулу приведите, пожалуйста.
Цитата:

Цитата Midsummer
Найти среднее арифметическое элементов каждой ее диагонали, параллельной побочной »

По какой формуле считается среднее арифметическое? (Вопрос на засыпку: в чем отличие от среднего геометрического?)
Какой формуле соответствуют положения элементов || побочной диагонали?
Что это вообще такое - побочная диагональ матрицы?
Цитата:

Цитата Midsummer
Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы »

Интересно узнать про горизонтальную ось симметрии. В каких случаях она существует, как ее определять в случае четного/нечетного кол-ва строк матрицы?

Buchik 14-06-2011 01:15 1693939

вот 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;
}


ferget 14-06-2011 03:03 1693981

ему уже все решили
http://www.cyberforum.ru/cpp-beginne...ead318091.html

lxa85 14-06-2011 08:34 1694039

А я бы те решения не засчитал ... Или засчитал, но с защитой.
Комментариев к коду нет, теоретических выкладок нет.
И вообще сомневаюсь, что они указатели проходили.

Buchik 14-06-2011 12:17 1694150

Ну, коментарии- минутное дело . А что за теоритические выкладки?)

lxa85 14-06-2011 12:52 1694175

Цитата:

Цитата Buchik
Ну, коментарии- минутное дело »

Комментарии - писать обязательно, тем более в лабах. Т.к. интересует именно небольшой код сути программы, а не программа + инструментарий. (генераторы матриц, распечатка матриц и т.п.)

Цитата:

Цитата Buchik
А что за теоритические выкладки?) »

Соответствие математических формул программной реализации.
Не с потолка же алгоритмы берутся. Грубо говоря, это ответы на вопросы заданные мною в первом сообщении ^^.
Прежде чем что-то найти, надо знать что искать. В противном случае - это будет чисто случайное совпадение.
Как например генератор случайных величин "чисто случайно" генерирует ключи от программ в сотни $ :)

Buchik 14-06-2011 13:14 1694195

Спасибо,в следующих моих ответах буду учитывать.

lxa85 14-06-2011 14:48 1694251

Buchik,
Цитата:

Цитата Buchik
for( j=0 ; j<n ; j++ )
{
if ( (i+1)%2 == 0 )
wcout << mas[i][j] << "\t" ;
}
wcout << L"\n" ; »

Наглядный тебе пример. Раз уж здесь разбор полетов начался.
У тебя стоит условие, т.е. уже потеря в две/три команды ассемблера, без учета суммирования в скобках (а это еще несколько команд, при "лобовой" реализации), и без учета деления. А деление "в лоб" без оптимизацией - еще ряд "бестолковых" тактов ЦП.
Меж тем, отвечая на вопрос:
Цитата:

Цитата lxa85
Как вообще записывается четное число? »

Формула четного числа : 2N. Умножение само по себе - относительно дорогая операция. Однако здесь идет умножение на два, что в двоичной системе может быть приравнено к сдвигу влево на 1 разряд. Сдвиг - это "логика", логические операции выполняются быстрее всего.
Вот и получается, что вместо множеств проверок и лишней работы ЦП, можно сразу определить делением (по сути двоичным сдвигом вправо на 1 разряд) кол-во четных строк, и получать следующую четную строку сдвигом вправо переменной счетчика.
Другое оптимизационное решение - делать двойной инкремент переменной счетчика (оптимизированное i:=i+2 == inc i, 2), т.к. операция инкремент - это одна достаточно "легкая" инструкция ЦП.
Возможность использования практически прямых указаний для ЦП зависит от реализации компилятора/интерпретатора языка.

Buchik 14-06-2011 15:04 1694261

тоесть мне надо было написать что-то на подобии такого?
Код:

        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?

lxa85 14-06-2011 23:35 1694558

Цитата:

Цитата Buchik
или как ты написал inc i, 2 ? вместо i=i+2? »

на такие вопросы я не отвечаю :) Все было сказано ранее.
Единственное что могу сказать - код не верен, четные строки матрицы он не печатает.

Buchik 15-06-2011 01:55 1694618

Вложений: 1
плохо ты видиш мой код. вот тебе дебуг, всё прекрасно работает

lxa85 15-06-2011 14:10 1694846

ммм, вот оно что. У тебя используется матрица [m+1, n+1]. Т.е. есть ряд не присвоенных значений, что однако позволяет избежать ряда ошибок при работе с малыми матрицами.
А ну ка если ... так и есть. 65535 - вылет.

Buchik 15-06-2011 15:32 1694891

lxa85, Тоесть, когда вводиш число превышающее значение int то вылетают ошибки??А как тогда это исправить?

lxa85 15-06-2011 16:36 1694934

Цитата:

Цитата Buchik
А как тогда это исправить? »

:dont-know :)
Верней знаю, но не скажу. Если у тебя идет объявление переменной через int, а максимальный int задать нельзя, в документации пояснений данной ситуации нет, то это баг, а вовсе не фича. :)
Значит неверен алгоритм, использующий заведомо бОльшие ресурсы, чем требуется.

Buchik 15-06-2011 19:41 1695028

Цитата:

Цитата lxa85
Верней знаю, но не скажу. »

А чего так?)

lxa85 15-06-2011 20:03 1695043

Buchik, а это скучно, банально и не интересно. :)
Я тебе показал ошибку, если ли я же ее и исправлю, эффекта будет ноль.
А вот если ты са-а-ам, то это совсем другое дело. Тогда ты сразу "Молодец", подумал, нашел решение, исправил ошибку, и все САМ! :) Ну разве не красота?
Т.ч. давай, думай и решай.

P.S. Хауса смотрел? Последняя серия 7ого сезона.
Афсун: Вы на самом деле хотите закончить сейчас?
:)

Buchik 15-06-2011 20:15 1695050

Цитата:

Цитата lxa85
P.S. Хауса смотрел? Последняя серия 7ого сезона.
Афсун: Вы на самом деле хотите закончить сейчас? »

Буть по твоему) просто я полностью все лабораторные свои так писал с масивами которые)Завтра поищу информации по этому пунктику...


Время: 07:53.

Время: 07:53.
© OSzone.net 2001-