23.11.2019, 04:51 [+3 UTC]
в нашей команде: 3 986 чел. | участники онлайн: 3 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.78 (18.11.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
22.11.2019, 18:00

Последний вопрос:
23.11.2019, 00:52
Всего: 151032

Последний ответ:
22.11.2019, 21:37
Всего: 259443

Последняя рассылка:
22.11.2019, 22:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
04.12.2009, 11:59 »
Гуревич Александр Львович
Большое спасибо. Отлично, с учетом обсуждения в мини-форуме. [вопрос № 174827, ответ № 257261]
13.11.2010, 18:43 »
Посетитель - 342817
Все классно! [вопрос № 180719, ответ № 264000]
06.02.2010, 14:27 »
Dimon4ik
Отличный пример! Спасибо. Все вышло. Разницу видно. Благодаря Вам понял суть, как работать с потоками. smile [вопрос № 176520, ответ № 259253]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 1376
Gluck
Статус: 7-й класс
Рейтинг: 798
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 680

Перейти к консультации №:
 

Консультация онлайн # 68895
Раздел: • С / С++
Автор вопроса: Waitekk
Отправлена: 28.12.2006, 11:48
Поступило ответов: 2

Подскажите, пожалуйста, как решитиь следующую задачу - "Заполнить матрицу (9х9) ЛП, от левого нижнего угла по диагонали: влево-вверх". ЛП-линейная последовательность. Я пытался всяко, последний вариант:
#include <iostream.h>
#include <conio.h>

int m[9][9];
int i, j, p, last_i, last_j;

int main() {
i=8; // задаю начальные координаты точки
j=0;

p=1;
while(p<82) {
if(i==8 && j==0) {
m[i][j]=p;
j++;
last_j=j; // тут я запоминаю номер столбца, с которого начинался послений счет
}
if(j!=0 && i==8) {
m[i][j]=p;
last_j=j;
j--;
i--;
}
if(j!=0 && i!=8) {
m[i][j]=p;
last_j==j;
j--;
i--;
}
if(j==0 && i!=8) {
m[i][j]=p;
i=8;
j=last_j+1;
}
p++;
}
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
// cout << "M[" << i << "][" << j << "] = " << m[i][j] <<endl;
cout << m[i][j] << " ";
if(j==8) {
cout << endl;
}
}
}

getch();
return 0;
}
Однако же, она не работает. Я перерыл весь инет, локалку Уфы, потратил очень много трафика, но ничего стоящего не нашел((
Подскажите, как ее решить, пожалуйста

Состояние: Консультация закрыта

Здравствуйте, Waitekk!
Если я правильно понял задачу (заполнение движущейся диагональной волной, на каждом гребне которой значение увеличивается на единицу - очень похожа на поиск кратчайшего пути в двумерной матрице, правда с приравниваем расстояний по сторонам и диагонали и упрощение начальных условий), то проще понять ее принцип:
1. Смени точку отсчета - пусть началом будет нужная вам клетка - левая нижняя (и ее координаты (1;1))
2. Отсчет по осям вправо и вверх.
3. Тогда легко понять, что каждая клетка имеет значение относительно ее координат - (i+j-1).
4. Переводим в систему отсчета матрицы в привычную для математика-программиста с началом от левого верхнего угла вправо и вниз и отсчетом от нуля. Преобразование координат дает формулу j=j1-1 i=m-i0, где i,j - преобразованные координаты, i0,j0- исходные m - количество строк матрицы(измерение i)
5. Таким образом задача сводится к двум вложенным циклам, сразу вместе с выводом результатов кстати.

А у вас в коде сходу несколько ошибок, хотя я и не совсем понял вааще его смысла, вы видимо собирались на каждой итерации заполнять все клетки, попавшие в очередной гребень волны. Это не есть гут по определению - в каждом гребне разное количество клеток - по-этому нужен как минимум еще вложенный цикл.
Кроме того - следите за кодом и сообщениями компилятора - даже хинтам и ворнингам - присвоение last_j==о - это не присвоение а операция сравнения - результат которой истина или ложь.
Зачем то вы ввели last_i - почему же нигде не используется? Видимо где то вместо нее написали last_j или вааще забыли.
В цикле вывода - вы переносите строку после каждых 8 элементов - только условие j==8 - не исполниться никогда - отсчет идет от 0 до n-1 - не забываем.
Вот это навскидку.


Консультировал: Tek
Дата отправки: 28.12.2006, 12:50

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 134021 от DarkDevil

Здравствуйте, Waitekk!
Пришел в голову только такой вариант решения (см. приложение)

Приложение:


Консультировал: DarkDevil
Дата отправки: 28.12.2006, 12:50

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.20306 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.78 от 18.11.2019
Версия JS: 1.34 | Версия CSS: 3.35