Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 629
от 02.01.2007, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 426, Экспертов: 40
В номере:Вопросов: 3, Ответов: 7


Вопрос № 68895: Подскажите, пожалуйста, как решитиь следующую задачу - "Заполнить матрицу (9х9) ЛП, от левого нижнего угла по диагонали: влево-вверх". ЛП-линейная последовательность. Я пытался всяко, последний вариант: #include <iostream.h> #...
Вопрос № 68918: Здравствуйте, уважаемые эксперты. Возникла у меня следующая проблема: был проект который собирался компилятором от VC6 (makefile используя GNU make), понадобилось чтоб собиралось все это VC7, все собирается если не указывать рантайма, но стоит ук...
Вопрос № 68919: Один файл пытаюсь переписать в другой посимвольно, но ести в файле fp встречается некоторая последовательность символов, например 123, то её не нужно записывать в файл stream. Как это осуществить?...

Вопрос № 68.895
Подскажите, пожалуйста, как решитиь следующую задачу - "Заполнить матрицу (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;
}
Однако же, она не работает. Я перерыл весь инет, локалку Уфы, потратил очень много трафика, но ничего стоящего не нашел((
Подскажите, как ее решить, пожалуйста
Отправлен: 28.12.2006, 11:48
Вопрос задал: Waitekk (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Tek
Здравствуйте, 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 - не забываем.
Вот это навскидку.
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 4-ый класс)
Ответ отправлен: 28.12.2006, 12:50

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

Приложение:

Ответ отправил: DarkDevil (статус: 1-ый класс)
Ответ отправлен: 28.12.2006, 12:50


Вопрос № 68.918
Здравствуйте, уважаемые эксперты.
Возникла у меня следующая проблема: был проект который собирался компилятором от VC6 (makefile используя GNU make), понадобилось чтоб собиралось все это VC7, все собирается если не указывать рантайма, но стоит указать в ключах компиляции ключик /MT появляются ошибки (см. приложение). При этом стоит линкеру сказать чтоб он юзал либы от 6 студии, и все собирается.
На путях нет никакого упоминания о шестой студии!

В чем может быть дело?

Заранее благодарен.

Приложение:

Отправлен: 28.12.2006, 14:29
Вопрос задал: Vadim (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Vadim!

я думаю вам сюда
http://msdn2.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx
The single-threaded CRT (libc.lib, libcd.lib) (formerly the /ML or /MLd options) is no longer available. Instead, use the multithreaded CRT. See [160]Multithreaded Libraries Performance
Ответ отправил: ramok (статус: 3-ий класс)
Ответ отправлен: 28.12.2006, 14:47

Отвечает: kool
Здравствуйте, Vadim!
Не подключены библиотеки - lib-ы,
в кот. определены функции Xran и Xlen.

Ответ отправил: kool (статус: 2-ой класс)
Ответ отправлен: 28.12.2006, 22:57


Вопрос № 68.919
Один файл пытаюсь переписать в другой посимвольно, но ести в файле fp встречается некоторая последовательность символов, например 123, то её не нужно записывать в файл stream.
Как это осуществить?

Приложение:

Отправлен: 28.12.2006, 14:32
Вопрос задал: Иванов Михаил Викторович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: DarkDevil
Здравствуйте, Иванов Михаил Викторович!
Возможно устроит такой вариант.
Писал в блокноте, так что корректность не гарантирую, но думаю идея будет понятна.
char buff[100];//не меньше чем длина строки, не включаемая в выходной файл
char BadString[]="123";//строка, которую нужно исключить
int n,i;
/* определение файловых дескрипторов и открытие файлов */
while(fread(&ch, 1, 1, fp)) //читаем очередной символ
{
if(ch==BadString[0])
{
if(strlen(BadString)>1)
{
n=1;
buff[0]=ch;
while(fread(&ch, 1, 1, fp))
{
if(ch!=BadString[n])
{
fwrite(buff, 100, n, stream);
break;
}
else
{
buff[n]=ch;
n++;
if(n>strlen(BadString))
break;
}
}
}
}
else
fwrite(&ch, 1, 1, stream);
}
Ответ отправил: DarkDevil (статус: 1-ый класс)
Ответ отправлен: 28.12.2006, 15:04

Отвечает: ramok
Здравствуйте, Иванов Михаил Викторович!

писано на коленке

Приложение:

Ответ отправил: ramok (статус: 3-ий класс)
Ответ отправлен: 28.12.2006, 15:17

Отвечает: kool
Здравствуйте, Иванов Михаил Викторович!
Где-то так (см. приложение).
Но намного быстрее (особенно на больших файлах)
использовать функции поиска
(например strstr, если речь идет о строках) и сразу
записывать в файл stream все что встретилось
от одной до другой найденой последовательности.
Но это уже другой вопрос.

Приложение:

Ответ отправил: kool (статус: 2-ой класс)
Ответ отправлен: 28.12.2006, 23:59


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное