Re[2]: Борландюга хитёр...
От: ZAMUNDA Земля для жалоб и предложений
Дата: 20.12.05 06:38
Оценка: 1 (1)
MT>Отформатировал был, тогда всё сразу стало бы видно:
Во-во...

int** mass, size;
// нелюблю я эти m, n, ёклмн потом сам в своём коде не разберёшся. ;)
cout << "Oboznachte razmer matricy\n";
cin >> n;

mass = new int*[size];

for (int i = 1; i < size-1 /*интервал: [1; size-1) */; i++)
{// для справки, i будет видна только внутри этого блока (снутри собок "{}") -- 
 // -- борланд так настроен по умолчанию.
    mass[i] = new int[size];

    // i тут лучше не пользовать, тем более не объявляя 
    // ("i = 2" -- присвоить переменной i значение 2).
    // В каждой "части" for ты можешь любое выражение писать, главное что 
    // сначала выполнится то что перед первым ";", потом то что перед вторым ";" 
    // и если оно результатом даст не ноль, то поедет выполнятся то что в "{}"
    // а потом выполнится то что после второго ";", а потом условие перед вторым ";" и т.д.
    // Например: можно так написать "for (int k = 0; k < size; k++)", 
    // а можно "for (int k = size; k--;)" первое и второе выражение переберёт все k на
    // интервале [0; size), но первое с 0 до size-1 а второе c size-1 до 0.
    for (int k = 2; k < size-1; k++)
        for (int j = 2; /*можно и по старому оставить, но так меньше "человеческий фактор"*/
                     j <= size-2; 
                     j += 2 /*"j+2" -- посчитать скока будет j плюс 2 и фсё! ;) */)
        mass[k][j] = 2;
}

mass[0][0] = mass[size-1][0] = mass[0][size-1] = mass[size-1][size-1] = 1;

cout << mass[i][j];

getch();

Времени мало, поэтому особливо не проверял -- если накосячил, не судите строго, эт очечапка.

PS: эх... помню как я с VB на BCB перелезал... Ж8-)
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re: Можете помочь...
От: Кодт Россия  
Дата: 20.12.05 09:31
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Я C++ занимась не так давно, знания есть, но опыта их применения мало. Раньше у меня все получалось, но вот столкнулся с проблемой. Думаю вам, бывалым программистам это как "два байта отослать"... Так вот, задача большая, но прошу помочь мне лишь с ее частью. Нужно сформировать квадратную матрицу (т.е. двумерный массив размера nхn) порядка n, т.е. я сам ввожу размерность матрицы, с таким чередованием элементов:


А>1000001

А>0202020
А>0202020
А>0202020
А>0202020
А>0202020
А>1000001

Формула для нахождения произвольного элемента матрицы
inline int mxy(int x, int y, int N)
{
  return
    (x==0||x==N-1)&&(y==0||y==N-1) ? 1 :
    (x%2==0)                       ? 2 : // кстати, а если N чётное - как должны чередоваться столбцы?
                                     0 ;
}
............
for(x=0;x<N;++x) for(y=0;y<N;++y)
  m[x][y] = mxy(x,y,N);

Для вывода на экран, очевидно, запоминать матрицу не нужно: достаточно вычислять и тут же показывать значения.
for(y=0;y<N;++y)
{
  for(x=0;x<N;++x)
    cout << mxy(x,y,N);
  cout << endl;
}
Перекуём баги на фичи!
Можете помочь...
От: Аноним  
Дата: 19.12.05 23:24
Оценка:
Я C++ занимась не так давно, знания есть, но опыта их применения мало. Раньше у меня все получалось, но вот столкнулся с проблемой. Думаю вам, бывалым программистам это как "два байта отослать"... Так вот, задача большая, но прошу помочь мне лишь с ее частью. Нужно сформировать квадратную матрицу (т.е. двумерный массив размера nхn) порядка n, т.е. я сам ввожу размерность матрицы, с таким чередованием элементов:

1000001
0202020
0202020
0202020
0202020
0202020
1000001

В общем-то саму теорию мостроения я понимаю, даже очень хорошо, строил на VisualBasic'e, но на C++ (а у меня Borlad C++ Builder 6) не получается. Программа запускается, вылазиет консоль, начинается выполнение первых пунктов задачи а потом когда по идеи доходит дело до массива, вылазиет сообщение — какой-то error. И все... Потом только через Диспечер задачь можно выйти. Конечно, может я что не правельно делаю, с точки зрения программного кода не логично, но в чем ошибка я не знаю. Подскажите.

Чтоб облегчить вам задачу, вот привожу один из текстов, его вариантов, для постоения этой матрицы. Может я что-то сделал не так?


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

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include<conio.h>
//---------------------------------------------------------------------------

#pragma argsused
#pragma argsused
void main()
{
int **mass,n,i,j;
cout << "Oboznachte razmer matricy\n";
cin >> n;

mass = new int*[n];
for (int i=1; i<n-2; i++)
{ mass[i] = new int [n];
for ( i=2; i<=n-2; i++)
for ( j=2; j<=n-2; j+2)
mass[i][j]=2; }
mass[0][0]=mass[n-1][0]=mass[0][n-1]=mass[n-1][n-1]=1;
cout<<mass[i][j];

getch(); }
//----------------------------------------------------------------------------
Re: Можете помочь...
От: MTatarnikov  
Дата: 20.12.05 02:36
Оценка:
Здравствуйте, Аноним!

Отформатировал был, тогда всё сразу стало бы видно:



int** mass,n,i,j;
cout << "Oboznachte razmer matricy\n";
cin >> n;

mass = new int*[n];

for (int i = 1; i < n-2; i++)
{
    mass[i] = new int [n];

    for (i = 2; i <= n-2; i++)
        for (j=2; j <= n-2; j+2)
            mass[i][j] = 2;
}

mass[0][0] = mass[n-1][0] = mass[0][n-1] = mass[n-1][n-1] = 1;

cout << mass[i][j];

getch();




Не знаю, как там на борланде, но из общих размышлений мне кажется, что вылетать может в самом внутреннем цикле. Т.е. выделяется одна строчка матрицы, а дальше идёт двойной цикл заполнения ВСЕЙ матрицы. Нехорошо. Ещё одно место с вылетом — переменная i в самом начале объявленна, но неинициализированна. В заголовке цикла переменная i опять объявляется, скрывая первую. Выходя из цикла, внутренняя i уничтожается, и в строчке
cout << mass[i][j]

видется изначальная неинициализированная i. Думаю, в данном примере закрывающая фигурная скобка просто поставленна неправильно.
Ещё мне не нравится запись типа
for (j = 2, j <= n-2; j+2)

. Ворнинги иногда полезно читать
Кстати, неплохо бы удалять память за собой, хотя в данном примере это не особо и важно.


Миша.



А>//---------------------------------------------------------------------------


А>#include <vcl.h>

А>#pragma hdrstop
А>#include <iostream.h>
А>#include<conio.h>
А>//---------------------------------------------------------------------------

А>#pragma argsused

А>#pragma argsused
А>void main()
А>{
А> int **mass,n,i,j;
А> cout << "Oboznachte razmer matricy\n";
А> cin >> n;

А> mass = new int*[n];

А> for (int i=1; i<n-2; i++)
А> { mass[i] = new int [n];
А> for ( i=2; i<=n-2; i++)
А> for ( j=2; j<=n-2; j+2)
А> mass[i][j]=2; }
А> mass[0][0]=mass[n-1][0]=mass[0][n-1]=mass[n-1][n-1]=1;
А> cout<<mass[i][j];

А> getch(); }

А>//----------------------------------------------------------------------------
Re[2]: Можете помочь...
От: xbit Россия  
Дата: 20.12.05 03:41
Оценка:
Здравствуйте, MTatarnikov, Вы писали:

MT>. Ворнинги иногда полезно читать


Их не только читать надо, но и избавляться от них по возможности (а лучше полностью)
Нас не догонят!
Re: Можете помочь...
От: Бабошин Андрей Германия http://andreybaboshin.livejournal.com/
Дата: 20.12.05 14:01
Оценка:
Здравствуйте, Аноним, Вы писали:

а чем vector<vector<int> > не устраивает?
Re[2]: Можете помочь...
От: Gilvat  
Дата: 21.12.05 09:11
Оценка:
Здравствуйте, мне все дали столько советов на основе которых я попробовал изменить текст программы.
Вот он, но проблема таже.



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

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include<conio.h>
//---------------------------------------------------------------------------

#pragma argsused
#pragma argsused
void main()
{
int **mass, n, a, i, j;
cout << "Oboznachte razmer matricy\n";
cin >> n;

mass = new int*[n];
for (a=1; a<n-2; a++)
{ mass[i] = new int [n];
for ( i=2; i<=n-2; i++)
for ( j=2; j<=n-2; j+=2)
mass[i][j]=2; }
mass[0][0]=mass[n-1][0]=mass[0][n-1]=mass[n-1][n-1]=1;
cout<<mass[i][j];

getch(); }
//-----------------------------



Подскажите, в чем недочет...
Re[3]: Можете помочь...
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 21.12.05 09:17
Оценка:
Здравствуйте, Gilvat, Вы писали:

G>Здравствуйте, мне все дали столько советов на основе которых я попробовал изменить текст программы.

G>Вот он, но проблема таже.

G>Подскажите, в чем недочет...


недочет в незнании C++ и попытке слепить что-то на скорую руку. здесь
Автор: sadomovalex
Дата: 21.12.05
работающий вариант
"Что не завершено, не сделано вовсе" Гаусс
Re[3]: Можете помочь...
От: night_beast СССР  
Дата: 23.01.06 10:10
Оценка:
Здравствуйте, Gilvat, Вы писали:

G>Здравствуйте, мне все дали столько советов на основе которых я попробовал изменить текст программы.

G>Вот он, но проблема таже.



G>//---------------------------------------------------------------------------


G>#include <vcl.h>

G>#pragma hdrstop
G>#include <iostream.h>

#include<iostream>

G>#include<conio.h>

G>//---------------------------------------------------------------------------

G>#pragma argsused

G>#pragma argsused
G>void main()
G>{
G>int **mass, n, a, i, j;
G>cout << "Oboznachte razmer matricy\n";
G>cin >> n;

std::cout, std::cin

G>mass = new int*[n];

G>for (a=1; a<n-2; a++)
G>{ mass[i] = new int [n];

здесь видимо a должно быть

G>for ( i=2; i<=n-2; i++)

G>for ( j=2; j<=n-2; j+=2)
G>mass[i][j]=2; }
G>mass[0][0]=mass[n-1][0]=mass[0][n-1]=mass[n-1][n-1]=1;

а ты под них память выделил? конкретно под mass[0] и mass[n-1]

G>cout<<mass[i][j];


G>getch(); }

G>//-----------------------------

G>Подскажите, в чем недочет...


сказал бы я да ладно уж
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.