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

Клуб профессиональных программистов :: Выпуск #72


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No72 (2009-06-23).

Здравствуйте, уважаемые читатели!

  • Программирование :: Общий
  • Знатоки полиглоты, просветите, попался тут интересный вопросик:
    Сравнение объектно-ориентированного подхода в языках PHP, Common Lisp, CLIPS и Visual Prolog.
    Грубо говоря, что общее есть везде, а где чего нет из ООП. Поискал в Интернете, ничего толкового не нашел.
  • Программирование :: С/С++ :: C/C++ Unix
  • Подскажите, где можно посмотреть исходники функции fprintf.

    Заранее благодарю!
  • Программирование :: Delphi
  • Задание: вывести треугольник Паскаля с заданным количеством строк. Массив для треугольника расситан, но вот как его вывести - возникает проблема. Максимум, что придумала - такой код
    //Вывод результата
    for I:= 1 to N do
     begin
     S:='';
    for J:= 1 to I do
    s:=' '+s+ ' '+ floattostr(a[I, J])+' ';
    memo1.Lines.add(s);

    в memo отображается (пробелы сохранены):
      1
       1  1
        1  2  1
         1  3  3  1
          1  4  6  4  1
           1  5  10  10  5  1

    Как изменить код, чтобы числа выводились в виде треугольника (чтобы число отступов уменьшалось сверху вниз)?

  • народ, помогите разобраться с процедурой!
    Там написаны комментарии, но я хочу узнать, что это такое:
    PBProgress.Visible, TTimi.Enabled, BSearch.Enabled, CBSource.Enabled,
    CBTarget.Enabled ,ShortRoute, CurrentRoute.OwnsObjects, CurrentRoute

    PBProgress.Visible := True;
    TTimi.Enabled := True;
    BSearch.Enabled := False;
    CBSource.Enabled := False;
    CBTarget.Enabled := False;


    Что значит каждое или для чего нужно(

    ShortRoute := TObjectList.Create;
    ShortRoute.OwnsObjects := False;
    CurrentRoute := TObjectList.Create;
    CurrentRoute.OwnsObjects := False;



    Помогите, пожалуйста!
  • Программирование :: Ассемблер
  • В отладчике debug.exe следует вычислить A/B
    A=620h, B=310h.
    при выполнении кода (фрагмент)
    ...
    mov ax,[bx] // в ax значение A
    mov dx,[bx+2] // в dx значение B
    idiv dx
    ...
    происходит ошибка (приложение debug.exe закрывается).
    Не пойму, в чем ошибка?
    Или для операции деления при таких исходных данных следует использовать другой оператор, а не idiv, какой же?

    (вычисляю в debug.exe, потому что так надо для контрольной работы :))
  • Как запретить вставку данных в RichEdit из буфера обмена и обрабатывать это событие самому?

    Пробую сабклассить RichEdit и ловить ctrl-v, не помогает.
    Код:
     mov eax,uMsg
    .if eax==WM_KEYDOWN
    .if wPm==VK_CONTROL
    mov eax,lPm
    shr eax,16
    .if ax==1Dh
    xor eax,eax
    ret
    .endif
    .endif
    jmp @F
    .else
    @@: invoke CallWindowProc,pOldRichProc,hWin,uMsg,wPm,lPm
                            xor eax,eax
    ret
    .endif
    invoke CallWindowProc,pOldRichProc,hWin,uMsg,wPm,lPm
    xor eax,eax
    ret
  • Программирование :: Perl
  • Подскажите, пожалуйста, как можно получить текст, расположенный между <div class="some_class"></div>.

    Пробовал использовать HTML::TokeParser:

    Код:
    use HTML::TokeParser;

    my $p = HTML::TokeParser -> new(shift||'file.html') or die 'can"t open<br>';

    while (my $token = $p->get_tag('div class="some_class"')) {
          my $text = $p->get_trimmed_text('/div');
          print "$text\n";
      }

    Так не получается. Если ставить просто <div></div>, то все работает.
  • Программирование :: Программирование 1С
  • Заранее прошу прощения, если аналогичные темы были, и я их не нашел.
    У меня вот такая проблема, практически никогда не работал с 1С, а сейчас срочно нужно получить данные по большому количеству организаций (порядка 500).
    Есть отчеты за год по организациям.
    Необходимо сделать отчет в форме таблицы, чтобы в нем в первом столбце шло название организации, во втором - данные: площадь сельскохозяйственных угодий (форма 9-АПК 560 строка), аналогично еще по ряду показателей, таким как основные средства и т.д.
    Я знаю, из каких форм бухгалтерской отчетсноти их взять, по каким строкам, но не знаю, как это автоматизировать, чтобы програма сама сделала такой отчет.
    И вообще, это возможно или нет.
    Заранее спасибо.
  • Программирование :: Программирование 1С :: 1С 7.x
  • Здравствуйте всем!
    Подскажите, пожалуйста, такую вещь.
    Во внешней компоненте в процедуре ПриОткрытии автоматом создаются несколько колонок, количество которых указывается пользователем. После загрузки этой компоненты при попытке добавить запись в нужную колонку вылетает ошибка. Да и при написании процедуры добавления что-то ничего не получается.
    Вот код ПриОткрытии
    Код:
    Процедура ПриОткрытии()
    скраундов=0;
    скстрок=0;
    ИмяИгры="";
    КлИгроков=0;
    КлТуров=0;
    ИменаИгроков="";
    предст="";
    ТЗ= СоздатьОбъект("ТаблицаЗначений");
    ТЗ.Очистить();
    ВвестиСтроку(ИмяИгры,"Название игры",60);
    Форма.Заголовок(ИмяИгры);
    ВвестиЧисло(КлИгроков,"Сколько игроков",1,0);
    ВвестиЧисло(КлТуров,"Сколько раундов",2,0);
    ТЗ.НоваяКолонка("Игрок","Строка");
    пока скраундов<>КлТуров Цикл
    скраундов=скраундов+1;
    предст="Тур"+Строка(СокрЛП(скраундов));
    ТЗ.НоваяКолонка(предст,"Число",10,2);
    КонецЦикла;
    ТЗ.НоваяКолонка("Всего");
    пока скстрок<>КлИгроков Цикл
    скстрок=скстрок+1;
    ТЗ.НоваяСтрока();
    ВвестиСтроку(ИменаИгроков,"Имя Игрока "+скстрок,15);
    ТЗ.Игрок=ИменаИгроков;
    ИменаИгроков="";
    КонецЦикла;
    ТЗ.Выгрузить(Таблица);
    ТЗ.Очистить();
    предст="";
    КонецПроцедуры // ПриОткрытии
    а это код попытки добавить запись
    Код:
    Процедура Сформировать()
    ТекТур=0;
    ХодИгрока=0;
    показ=0;
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    Таблица.Выгрузить(ТЗ);
    ВвестиЧисло(ТекТур,"Тур №",2,0);
    ВвестиЧисло(ХодИгрока,"Ходит игрок №",1,0);
    ТЗ.ПолучитьСтрокуПоНомеру(ХодИгрока);
    ВвестиЧисло(показ,"Результат",10,2);
    предст="Тур"+Строка(СокрЛП(ТекТур));
    ТЗ.предст=показ;
    показ=0;
    ХодИгрока=0;
    ТекТур=0;
    ТЗ.Выгрузить(Таблица);
    КонецПроцедуры
    p.s. Где-то в интернете читал, что возможно с помощью курсора мыши активировать нужную ячейку на запись, но для этого нужна или formEX или 1cpp.dll, скачал обе, а вот информации, чего нужно использовать, не найду.
  • У справочников периодические реквизиты можно посмотреть кнопкой "История", а можно - F5 (Действия - История значения). Меня  ОЧЕНЬ интересует, как в конфигураторе называется отчет, который открывается по кнопке F5.
  • Здравствуйте. Подскажите пожалуйста. Каким образом можно подсчитать сумму реализаций в данном запросе, например с СТ00000008 по СТ00000013 (см скриншот). Вообще в идеале планируется сделать так. Справа добавляется еще одна колонка. И в ней напротив каждой реализации выводится сумма всех реализаций, которые были до нее раньше по времени, включительно. Вот текст запроса
    //*******************************************
    // Процедура генерации запроса Сформировать.
    //
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Покупатель = Регистр.ЗарплатаМенеджера.Покупатель;
    |ДокументыУчета = Регистр.ЗарплатаМенеджера.ДокументРеализация, Регистр.ЗарплатаМенеджера.ДокументСтрВыпБанкаПриход;
    |СуммаРеализация = Регистр.ЗарплатаМенеджера.СуммаРеализация;
    |СуммаСтрВыпБанкаПриход = Регистр.ЗарплатаМенеджера.СуммаСтрВыпБанкаПриход;
    |Функция РеализацияСумма = Сумма(СуммаРеализация);
    |Функция СтрВыпБанкаПриходСумма = Сумма(СуммаСтрВыпБанкаПриход);
    |Группировка Покупатель упорядочить по Покупатель.Наименование;
    |Группировка Документ;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей Покупатель
    Таб.ВывестиСекцию("Покупатель");
    Пока Запрос.Группировка(2) = 1 Цикл
    // Заполнение полей Документ
    Таб.ВывестиСекцию("Документ");
    КонецЦикла;
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры

    Скриншот запроса и сам отчет прилагаю. Конфигурация типовая ТиС 7.7. ЗарплатаМенеджера-это регистр оборотов.
  • Формирую отчет по справочнику "Назначения использования" (он подчинен справочнику "Материалы"). Запросом выбираю все элементы и владельцев. После выгружаю в таблицу значений. Формирую таблицу. В расшифровке по владельцу пишу - ТЗ.Владелец.
    Вопрос вот в чем: если я открываю Владельца (т.е. элемент справочника Материалы) через свой Отчет, то при попытке открыть подчиненный ему справочник вижу "Не задан элемент-владелец". Если те же действия произвожу из справочника "Материалы", то подчиненный справочник открывается идеально. 

    То есть - сам запрос информацию выдает идеально. У меня нет к нему претензий. Но почему не открывается подчиненный справочник из справочника-владельца, если элемент справочника-владельца открыт через отчет?! Это самое главное!  :confused:  :-/
  • Доброго времени суток всем!  :)
    Предыстория: необходимо реализовать количественно-суммовой учет в сильно измененной бухгалтерии (7.7). Собиралась сделать так: субсчета 10-го счета, для субконто "МестаХранения" включаем "Учет по сумме", соответственно изменяем модули проведения некоторых доков, типа "ТребованиеНакладная" и т д. Но не прошло! Естественно, так как база не пустая, вылезли отрицательные остатки по дебету субсчетов десятого (суммы), что совсем не хорошо. Перепроводить документы строжайше запретили.
    Собственно, вопрос: можно ли как-то решить вышеозначенную задачу другим способом, и не перепроводя документы закрытых периодов???!!!
    Заранее благодарю  :)
  • Программирование :: Программирование 1С :: 1С 8.x
  • Если кому знакома данная ситуация. Загружаю 4000 элементов в документ Оприходование товаров.
    Вылезла ошибка - нехватает памяти V8. :wow:
    Расширил сперва СМХ до 200ГБ, смотрю - такая же ерунда. :dontknow:
    Расширил память до 8ГБ - такая же ерунда. :rtfm:
    Пришлось загружать по 2000 элементов  :spy:
    Так в чем же может быть проблема? :o
    Очередной Баг от компании 1С  :mad:

    помогите работа стоит.  :confused:
  • Приветствую, есть вопрос:

    Для сайта делается механизм обновления прайса из 1С. Для этого делается внешняя обработка. Все нормально, за исключением одного момента. Не удается получить цены. На моем компьютере все работает, цены получаются, а на реальной системе нет. Правда разработка велась на версии 1С 8.0 Предприятие, типовая конфигурация, файловая версия.  На реальной системе тоже типовая, но 8.1. серверная.  Но ведь вряд ли из-за этого такая разница..

    Прилагаю ниже запрос, которым делаю выборку, подскажите пожалуйста, что не так?

    запрос = Новый Запрос;

    ТипЦенВЗапросе1 = Новый СписокЗначений;
    ТипЦенВЗапросе1.Добавить(Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная"));

    ТипЦенВЗапросе2 = Новый СписокЗначений;
    ТипЦенВЗапросе2.Добавить(Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая"));


    запрос.Текст = "
    |ВЫБРАТЬ
    | Рег.Номенклатура КАК Номенклатура,
    | Рег.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    | Рег.ТипЦен.Ссылка КАК ТипЦен,
    | Рег.Цена КАК Цена,
    | Рег2.Цена КАК ЦенаОпт,
    | Рег.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | Рег.Валюта КАК Валюта
    | ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаПрайса, ТипЦен В (&ТипыЦен1)) КАК Рег
    | ЛЕВОЕ СОЕДИНЕНИЕ
    |     РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаПрайса, ТипЦен В (&ТипыЦен2)) КАК Рег2 ПО Рег2.Номенклатура=Рег.Номенклатура
    |УПОРЯДОЧИТЬ ПО Рег.Номенклатура, Рег.ТипЦен
    |";


    запрос.УстановитьПараметр("хар", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
    запрос.УстановитьПараметр("ТипыЦен1", ТипЦенВЗапросе1);
    запрос.УстановитьПараметр("ТипыЦен2", ТипЦенВЗапросе2);
    запрос.УстановитьПараметр("ДатаПрайса", ТекущаяДата());

    результат = запрос.Выполнить();

    Выборка = результат.Выбрать();

    Ну и далее в цикле перебирая выборку поля Выборка.Цена и Выборка.ЦенаОпт дают либо "0" либо пустую строку..

    В чем ошибка?

    Заранее благодарю.
  • Операционные системы :: Windows
  • Доброго времени суток.
    Как ввести админский пароль, работая под юзером?
  • Доброго времени суток.

    Хочу сделать несколько сайтов на одном компе (ОС XP), но не знаю, как прописать второй/третий сайт в IIS....
  • Я написал программу. Она создает скриншоты и "лепит" их на Рабочий стол в качестве обоев. При таком подходе программа должна делать скриншот только если в данный момент работает полноэкранное приложение. Я сделал так:

    Код:
    CWnd* pForegroundWindow=GetForegroundWindow();
    if (!pForegroundWindow) continue;

    // Определить размер этого окна вместе с элементами управления
    CRect WindowRect;
    pForegroundWindow->GetWindowRect(&WindowRect);

    // Определить размер клиентской области этого окна
    CRect ClientRect;
    pForegroundWindow->GetClientRect(ClientRect);

    // Сравнить размеры, если не совпадают - continue
    if (WindowRect.Width() != ClientRect.Width() || WindowRect.Height() != ClientRect.Height()) continue;

    Все хорошо, кроме одного - если нет открытых окон или все окна свернуты, скриншот создается. Следующее не помогло:

    Код:
    if
    (pForegroundWindow->m_hWnd == NULL) continue;
    if (pForegroundWindow == GetDesktopWindow()) continue;
    if (GetFocus() == GetDesktopWindow()) continue;

    Вопрос такой. Каким способом можно отличить Рабочий стол от полноэкранного приложения? Или каким другим способом можно определить, что текущее окно является полноэкранным?
  • Что за форточка? Нашёл на диске "БГ рекомендует".
  • Операционные системы :: Unix и другие
  • Здраствуйте.
    Порекомендуйте файервол для Linux с GUI интерфейсом, вроде Comodo, Outpost.
    Чтобы был режим обучения. :)
    Почитал про возможности iptables, впечатляет, но добавлять удалять, править правила в ручную через
    консоль без GUI интерфейса - думаю утомительно :-/
  • Операционные системы :: Unix и другие :: Linux
  • На интернет шлюзе стоит Mandriva Linux 2009. Шлюз настроен с помощью shorewall, прокси и таблицы маршрутов. eth0 смотрит в инет, а eth1 в локалку. В последнее время eth1 стал периодически отключаться. То есть ifconfig показывает правильные настройки, а сетевуха не работает! Восстановить работу тем же ifconfig не выходит - приходится в графической утилите Сетевой центр запускать ее, нажимая десятки раз подряд кнопку "Подключить". При этом еще и нарушается таблица маршрутов. Сейчас в дополнение появилась еще одна напасть - сама собой нарушается таблица маршрутов. То есть пропадает сеть с маршрутом через eth1, а вместо него подставляется та же сеть с шлюзом 0.0.0.0.
    Вот правильная таблица маршрутов:

    Код:
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    217.69.165.128   0.0.0.0         255.255.255.128 U         0 0          0 eth0
    169.254.0.0     169.254.37.1    255.255.0.0     UG        0 0          0 eth1
    0.0.0.0         217.69.165.129   0.0.0.0         UG        0 0          0 eth0

    А вот что получается после глюка:

    Код:
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    217.9.165.128   0.0.0.0         255.255.255.128 U         0 0          0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
    0.0.0.0         217.69.21.165.129   0.0.0.0         UG        0 0          0 eth0

    Поискал в системном логе - вот что есть на описанный период времени:

    Код:
    Jun 11 15:44:57 AnsaldoGW kernel: VFS: busy inodes on changed media.
    Jun 11 15:45:29 AnsaldoGW last message repeated 32 times
    Jun 11 15:46:31 AnsaldoGW last message repeated 62 times
    Jun 11 15:47:33 AnsaldoGW last message repeated 62 times
    Jun 11 15:48:35 AnsaldoGW last message repeated 62 times
    Jun 11 15:49:37 AnsaldoGW last message repeated 62 times
    Jun 11 15:50:39 AnsaldoGW last message repeated 62 times
    Jun 11 15:51:41 AnsaldoGW last message repeated 62 times
    Jun 11 15:52:43 AnsaldoGW last message repeated 62 times
    Jun 11 15:53:45 AnsaldoGW last message repeated 62 times
    Jun 11 15:54:47 AnsaldoGW last message repeated 62 times
    Jun 11 15:55:49 AnsaldoGW last message repeated 62 times
    Jun 11 15:56:51 AnsaldoGW last message repeated 62 times
    Jun 11 15:57:53 AnsaldoGW last message repeated 62 times
    Jun 11 15:59:57 AnsaldoGW last message repeated 62 times
    Jun 11 16:00:01 AnsaldoGW last message repeated 5 times
    Jun 11 16:00:01 AnsaldoGW CROND[27222]: (drweb) CMD (/opt/drweb/update.pl)
    Jun 11 16:00:03 AnsaldoGW kernel: VFS: busy inodes on changed media.
    Jun 11 16:00:35 AnsaldoGW last message repeated 32 times
    Jun 11 16:01:01 AnsaldoGW last message repeated 27 times
    Jun 11 16:01:01 AnsaldoGW CROND[27241]: (root) CMD (nice -n 19 run-parts --report /etc/cron.hourly)
    Jun 11 16:01:03 AnsaldoGW kernel: VFS: busy inodes on changed media.
    Jun 11 16:01:35 AnsaldoGW last message repeated 32 times
    Jun 11 16:02:07 AnsaldoGW last message repeated 33 times

    Отчего это last message repeated 62 times? В каких еще логах надо смотреть? Может это железо глючит?
    Помогите, пожалуйста.
  • Направления программирования :: Drivers
  •  Я занимался программированием уже один год!
     Но постоянно я себе задаю вопросы:

     1. Так в мире есть много таких хороших специалистов по программированию драйвера, и они работают в основном какой-то компании изготовителей различных плат для КП и устройств, и обычно эти компании располагают в западных странах. Если я занимаюсь программированием драйверов, то есть потом для меня работу.

    2. Программирование драйвера для Виндов на новые ОС (7, Vista) сильно ли отличается от этого на XP?. Как я работаю на Vista на уровне Пользователя, то тут очень много ограничений доступа, и это сильно влияет ли на установку драйверов и их написание?

    3. У меня есть возможность программирования на микроконтроллерах (and Embedded system).  Это тоже сложное направление, так что если я пошел заняться этим направлением?

     Очень спасибо всем за ответы.
  • Есть PCI-плата, что мастером пишет в память компьютера по заданным адресам в буфер.
    Для выделения этого буфера в ранних версиях использовался невыгружаемый (nonpaged)  пул памяти ядра, который потом маппировался на адресное пространство приложения.
    В новой версии требуется большой буфер - больше чем лимит в 256 Мб nonpaged  пула.
    Можно выделить память собственно в приложении и залочить, но тогда при слёте приложения память буфера освобождается и отдаётся другим задачам, а плата про это узнаёт не сразу, продолжает писать, следствие - синий экран.
    Можно ли драйверу как-то "придержать" память приложения, что бы она после слёта не сразу освобождалась?
  • Всем доброго время суток!
    Люди добрые, помогите советами, ссылками а может и примерами кодов, как писать дрова для WinCE6.0?
    У меня установлен Windows Embedded CE 6.0, Platform Builder и, конечно же, VS 2005. Что дальше? 
  • Практические разделы :: Базы данных
  • Вопрос не сколько практический, сколько риторический: кто-нибудь видел в каком-либо API возможность подставлять в оператор переменный набор значений? Вопрос без определенной СУБД.

    Например,
    исходный оператор: SELECT * FROM tab t WHERE t.val IN (:VALUES);
    получается: SELECT * FROM tab t WHERE t.val IN (1, 2, 3, 4);

    Понятно, что можно руками это заполнить. Просто не понятно, это я такой привередливый или разработчики всяких API - не практики?
  • Привет всем. Есть база данных на Access связанная в делфи через ADOConnection (ADOTable, DataSource, DBGrid и тд  :)  ). В акцесе есть таблицы 1 курс, 2 курс, 3 курс, 4 курс с полями
    [ Предмет | Часы | Группа | Кафедра | Специальности ]
    Поля кафедры и специальности связаны с другими отдельными таблицами (Кафедры, Специальности) по полям id_specialnosti и id_kafedri.

    Возможно ли вывести отдельную таблицу, выбрав определенную кафедру (раскрывающийся список, например DBLookupComboBox связанный с таблицой кафедр), что бы выводились все группы с часами и предметам относящиеся к этой кафедре, и затем выводилась сумма по предметам.

    Внимание: Загвоздка вся в том, что бы наименование групп (которые относятся к выбранной кафедре) в тех таблицах (1 курс, 2 курс ...) стала шапкой таблицы - назовем ее Смета часов.

    Примерно это должно вот так выглядеть

    Таблица допустим возьмем 1 курс:

    Шапка                          [ Предмет         | Часы | Группа       | Кафедра              | Специальности              ]
    Заполненные поля       [ Математика   |    20  | ПОВТ-2       | Инф. и матем.      | Прог. обесп. выч. тех.   ]
                                         [ История          |    10  | Право-14   | Правовые дисц.    | Правоведение              ]


    и возьмем таблицу 2 курс

    Шапка                          [ Предмет         | Часы | Группа    | Кафедра             | Специальности                     ]
    Заполненные поля       [ ОС                  |    15  | ИС - 4      |Инф. и матем.      | Информационные сис.          ]
                                         [ Финансы         |    25  | ПСО-14   |Правовых дисц.    | Пераво и орг. соц. обесп.    ]

    Теперь с этих таблиц должна сформироваться таблицко, такого рода:

    Например мы выбрали кафедру - Информатики и математики:


    Шапка                                         [Предмет               |   ПОВТ -2    |    ИС-4    ]
    Заполненные данными поля      [ Математика         |    20            |               ]   
                                                        [ ОС                        |                    |    15       ]       

    Помогите, очень прошу.. хнык...
  • Собственно, задача уже решена — просто хочу поделиться материалом, т.к. в русскоязычном инете ничего нет.

    Итак, задача: отсортировать символы внутри строки.
    Код: (sql)
    -- Глобальный тип.
    CREATE TYPE char_table_t IS TABLE OF CHAR(1);

    CREATE OR REPLACE FUNCTION SORT_STRING_INSIDE(p_str VARCHAR2) RETURN VARCHAR2 DETERMINISTIC AS
    n NUMBER;
    s VARCHAR2(256);
    st char_table_t := char_table_t();
    BEGIN
    FOR n IN 1..LENGTH(p_str)
    LOOP
    st.EXTEND;
    st(n) := SUBSTR(p_str, n, 1);
    END LOOP;

    SELECT CAST(MULTISET(SELECT * FROM TABLE(st) ORDER BY 1) AS char_table_t)
    INTO st
    FROM DUAL;

    FOR n IN st.FIRST..st.LAST  
    LOOP
    s := s || st(n);
    END LOOP;

    RETURN s;
    END;

    Тестим:
    Код: (sql)
    SELECT SORT_STRING_INSIDE('6CD25A3478')
    str FROM DUAL;

    str
    ----------
    2345678ACD

    Метод "SELECT CAST(MULTISET(..." также можно использовать для сортировки других типов, но тип коллекции должен быть объявлен глобально — с локальными типами Oracle работать не желает (и прямо об этом говорит).
    Об этом тут: http://technology.amis.nl/blog/1217/sorting-plsql-collections-the-quite-simple-way-part-two-have-the-sql-engine-do-the-heavy-lifting
  • Практические разделы :: Железо
  • Ребят, подскажите вот проблема. Работает комп смотрим фильмы, музыку слушаем и т.д., начинаем играть во что либо он начинаем через некоторое время моргать и потом совсем черный хотя не отключаеться. Перезагружаем все нормально пока снова играть не сядем. Что делать?
  • Практические разделы :: Графика и дизайн
  • Я решил, так как я только начинающий и мало чего знаю.

    Сделать тень с помощью stencil-буфера, алгоритм вроде такой:
    1. Очистка буферов z-буфера и трафарета;
    2. Выводим объекты (объект)
    3. Включение теста трафарета и маскирование части экрана с помощью операций с буфером трафарета;
    4. Очистка z-буфера;
    5. Вывод всей сцены с учетом трафаретной маски.

    Вот мой код функции рендеринга до теней

    Код:
    // Функция рендеринга Direct3D
    void RenderingDirect3D(void)
    {
        if (pDirect3DDevice == NULL)
           return;
        // Очистка z-буфера
        pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET |  D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);

        pDirect3DDevice->BeginScene();

        pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX));
        pDirect3DDevice->SetIndices(pBufferIndexes);
        pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);

        pDirect3DDevice->SetTexture(1, NULL);
        // Установка идентификатора первой текстуры
        pDirect3DDevice->SetTexture(0, pTexture0);
        // Устанавливает состояния и операции первой текстуры
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);

        Matrix();
        pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

        pDirect3DDevice->SetTexture(0, NULL);
        // Установка идентификатора второй текстуры
        pDirect3DDevice->SetTexture (1, pTexture1);
        // Устанавливает состояния и операции второй текстуры
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

        Matrix1();
        pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

        pDirect3DDevice->EndScene();

        pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
    }

    Вот мой код функции рендеринга и функции создания тени, но почему-то тени не появились, всё как было так и осталось

    Код:
    // Функция рендеринга Direct3D
    void RenderingDirect3D(void)
    {
        if (pDirect3DDevice == NULL)
           return;
        // Очистка z-буфера
        pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET |  D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);

        // Очистка буфера трафарета (stencil)
        pDirect3DDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_STENCIL, D3DCOLOR_XRGB(255,255,255), 0.0f, 0);

        pDirect3DDevice->BeginScene();

        pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX));
        pDirect3DDevice->SetIndices(pBufferIndexes);
        pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);

        pDirect3DDevice->SetTexture(1, NULL);
        // Установка идентификатора первой текстуры
        pDirect3DDevice->SetTexture(0, pTexture0);
        // Устанавливает состояния и операции первой текстуры
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);

        Matrix();
        pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

        pDirect3DDevice->SetTexture(0, NULL);
        // Установка идентификатора второй текстуры
        pDirect3DDevice->SetTexture (1, pTexture1);
        // Устанавливает состояния и операции второй текстуры
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

        Matrix1();
        pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

        EnterStencilBuffer();

        pDirect3DDevice->SetTexture(1, NULL);
        // Установка идентификатора первой текстуры
        pDirect3DDevice->SetTexture(0, pTexture0);
        // Устанавливает состояния и операции первой текстуры
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
        pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);

        Matrix();
        pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

        pDirect3DDevice->SetTexture(0, NULL);
        // Установка идентификатора второй текстуры
        pDirect3DDevice->SetTexture (1, pTexture1);
        // Устанавливает состояния и операции второй текстуры
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
        pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

        Matrix1();
        pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
       
        // Установка нового режима обновления
        pDirect3DDevice->SetRenderState(D3DRS_STENCILREF, 1);

        pDirect3DDevice->EndScene();

        pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
    }
    // Создание плоской тени (stencil Buffer)
    void EnterStencilBuffer(void)
    {
        // Включаем буфер трафарета (stencil)
        pDirect3DDevice->SetRenderState(D3DRS_STENCILENABLE, true);
       
        // Установка для трафарета операцию сравнения
        pDirect3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
        // Установка режима обновления
        pDirect3DDevice->SetRenderState(D3DRS_STENCILREF, 0);
        // Установка маски сравнения
        pDirect3DDevice->SetRenderState(D3DRS_STENCILMASK, 0xffffffff);
       
        // Увеличить значение stencil-буфера на единицу
        pDirect3DDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_INCR);
        pDirect3DDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_INCR);

        // Очистка z-буфера
        pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET |  D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);
    }

    Что я сделал не так, почему нет теней?

    Есть мнение, что я не рассчитываю контурные ребра и не вытягиваю теневой объём.

    Хотя в книге "Advanced 3D Game Programming Using DirectX 9.0", главу 10, ничего про это не сказано.

    Там всего Там было написано всего два куска кода, не щитая текста и вспомагательных таблиц.

    Вот код из книги

    Listing 10.20: Sample code to set up the stencil buffer for an overdraw counter

    Код:
       // pDevice is a valid Direct3D Device
       
       // Turn on stenciling
       pDevice->SetRenderState( D3DRS_STENCILENABLE, TRUE );
       
       // Set the function to always pass.
       pDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_ALWAYS );
       pDevice->SetRenderState( D3DRS_STENCILREF, 0 );
       pDevice->SetRenderState( D3DRS_STENCILMASK, -1 );
       
       // Always increment the stencil value
       pDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_INCR );
       pDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_INCR );


    Listing 10.21: Sample code to set up the stencil buffer for a wipe

    Код:
     
     // Stencil is initially cleared to 0.
       // pDevice is a valid Direct3D Device pointer
       
       // Set up stencil states for the wipe polygon
       pDevice->SetRenderState( D3DRS_STENCILENABLE, TRUE );
       pDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_ALWAYS );
       pDevice->SetRenderState( D3DRS_STENCILPASS,D3DSTENCILOP_INCR);
       pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_NEVER );
       pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
       
       // Render the wipe polygon
       ...
       
       pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_ALWAYS );
       pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
       pDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_EQUAL );
       pDevice->SetRenderState( D3DRS_STENCILPASS,D3DSTENCILOP_KEEP);
       pDevice->SetRenderState( D3DRS_STENCILREF, 0 );
       
       // Render the old scene
       ...
       
       pDevice->SetRenderState( D3DS_STENCILREF, 1 );
       
       // Render the new scene
       ...
  • Я хочу наложить текстуру на два куба, но на две стороны текстура не накладывается.

    Вот как я обявляю вершины кубов

    Код:
    // Создаём вершины для куба
    TRIANGLEVERTEX Vertices[] =
    {
                {-2.5f, -2.5f, -2.5f, 0x00000fff, 1.0f, 0.0f},
                {-2.5f,  2.5f, -2.5f, 0x00000fff, 1.0f, 1.0f},
                { 2.5f,  2.5f, -2.5f, 0x00000fff, 0.0f, 1.0f},
                { 2.5f, -2.5f, -2.5f, 0x00000fff, 0.0f, 0.0f},
                { 2.5f, -2.5f,  2.5f, 0x00000fff, 0.0f, 1.0f},
                { 2.5f,  2.5f,  2.5f, 0x00000fff, 0.0f, 0.0f},
                {-2.5f,  2.5f,  2.5f, 0x00000fff, 1.0f, 0.0f},
                {-2.5f, -2.5f,  2.5f, 0x00000fff, 1.0f, 1.0f}
    };

    // Заполняем индексный буфер
    unsigned short Indexes[36] =
    {
            0, 1, 2,
            0, 2, 3,
            4, 5, 6,
            4, 6, 7,
            3, 2, 5,
            3, 5, 4,
            7, 6, 1,
            7, 1, 0,
            1, 6, 5,
            1, 5, 2,
            3, 4, 7,
            3, 7, 0
    };

    И ещё так как кубы мелковаты, я установил точку откуда смотрю 10 в место 80 и тогда на экране появляется один куб который можно хорошо рассмотреть.

    Не ужели чтобы мне правельно выводить текстуры мне нужно описать 24 вершины куба в место 8 или можно как то исхитрится?

    И ещё я компилирую в среде Microsoft Visual C++ 6.0 Standard Edition и если я хочу запустить программу на компьютере, где не установлена среда Microsoft Visual C++ 6.0, то выскакивает сообщение об ошибке что программа не может найти какуюто d3dx9_40.dll от directx.

    Что с этим делать?

    В архиве лежит код, исполняемый файл и файл с текстурой.
  • Начал учится выводить текст на экран по книге Станислава Горнакова "DirectX 9: Уроки программирования на С++".
    У него в главе одни ошибки я их поправил как писали в интернете всё равно ошибки.

    У меня есть ещё книга Алена Торна "Графика в формате DirectX 9: Поолное руководство по использованию 3D-пространства", но там к сожалению нет главы посвещённой выводу текста.

    Что же я не так сделал?

    Прикрепляю архив Text.rar с двумя файлами:
    1. Text_Original.cpp текст кода из книги (в интернете говорят там много всего неправельно)
    2. Text.cpp текст кода из книги переделанный по совету из интернета и адаптирован под builder
    3. error.jpg - PrintScreen ошибок
  • Поскажите пожалуйста, в чем тут может быть дело?

    Вот здесь: http://slil.ru/27762127
    два варианта программы. В первом варианте появляется какая-то рябь.

    В первом я делаю так:

    D3DXMatrixPerspectiveFovLH( &m_MatrixProjection,
             m_Alfa, // Угол поля зрения
             m_Koeff, // Коэффициент сжатия, должен зависеть от соотношения сторон окна (X/Y)!!!
             0.5f, // Передний план отсечения
             1000.0f ); // Задний план отсечения

    Во втором:

    D3DXMatrixPerspectiveFovLH( &m_MatrixProjection,
             m_Alfa, // Угол поля зрения
             m_Koeff, // Коэффициент сжатия, должен зависеть от соотношения сторон окна (X/Y)!!!
             10.0f, // Передний план отсечения
             1000.0f ); // Задний план отсечения
  • Учимся программировать :: Срочно пАмАгите!!!
  • singleton

    имеется шаблон класса:
    Код:
        /** Template class for creating single-instance global classes.
        */
        template <typename T> class Singleton
        {
        protected:

            static T* ms_Singleton;

        public:
            Singleton( void )
            {
                assert( !ms_Singleton );
    #if defined( _MSC_VER ) && _MSC_VER < 1200
                int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
                ms_Singleton = (T*)((int)this + offset);
    #else
        ms_Singleton = static_cast< T* >( this );
    #endif
            }
            ~Singleton( void )
                {  assert( ms_Singleton );  ms_Singleton = 0;  }
            static T& getSingleton( void )
    { assert( ms_Singleton );  return ( *ms_Singleton ); }
            static T* getSingletonPtr( void )
    { return ms_Singleton; }
        };

    насколько он безопасен в многопоточных приложениях?

    имеется наследования вида:
    class Application : public Ogre::Singleton<Application>

    объясните, что означает:
    template<> Application* Ogre::Singleton<Application>::ms_Singleton = 0;
    выполняемое перед main

  • Ребят, нужна помощь. В общем, надо построить бинарное дерево (дерево поиска), а потом из него удалить ветвь, начинающюся с ключа M... есть ф-я построения дерева и ф-я вывода его на экран, помогите написать ф-ю удаления ветки, нач-ся с ключа M, и вывести на экран получившееся дерево...
    Код:
    #include <iostream.h>
    #include <iomanip.h>
    #include <stdlib.h>
    #include <conio.h>
    struct Node  
     { int key;
       Node *l;
       Node *r;
     };
    typedef Node* NodePtr;
    void AddTree(NodePtr& t, int k);
    void TreeOut( NodePtr t, int level=1 );

    void main()
    { NodePtr t, tl;
      int n, e;
      t = NULL;
      cout <<"vvedite 4isla,  konec- Ctrl+Z: ";
      while ( cin >>e ) AddTree(t, e);
      cout <<endl;  TreeOut( t );
      TreeOut(t);

    }

    void AddTree(NodePtr& t, int k)
     
    { if (t == NULL)  
       { t = new Node; t->l = NULL; t->r = NULL; t->key = k; }
       else    
        { if (k >= t->key) AddTree(t->r, k);  
          if (k <  t->key) AddTree(t->l, k);  
        }
    }

    void TreeOut( NodePtr t, int level )
    { int tab = 5;

      if (t == NULL) cout <<"Derevo pusto \n";
       else
        { if (t->r != NULL) TreeOut(t->r, level+1);
       
          cout <<setw(tab*level) <<t->key <<endl;
          if (t->l != NULL) TreeOut(t->l, level+1);
        }
    }
  •  :rupor:Привет, помогите решить задачу на классы: :rupor:

    Создать класс для хранения календарных дат. Обеспечить возможность работы
    с датами в различных форматах, изменения даты на заданное количество дней.
    Перегрузить операцию «–» для нахождения разности дат и операции сравнения.
    Для класса определить оператор <<. Стандартные функции и типы С для работы
    с датами не использовать.
    Переопределить операции << и >> для ввода-вывода объектов класса data.

    Код:
    //---------------------------------------------------------------------------
    #pragma hdrstop
    #include <iostream.h>
    #include <iomanip.h>

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

    #pragma argsused

    class data
    {
    unsigned int day;
    unsigned int month;
    unsigned int year;

    public:
    static int type;
    data(unsigned int d=1,unsigned int m=1,unsigned int=1);
    friend ostream& operator << (ostream& out,data& c);
    friend ostream& operator >> (ostream& in, data& c);
    friend bool operator == (const data&, const data&);
    void InputData(char *str);
    };

    data::data(unsigned int d, unsigned int m, unsigned int y)
    {
    month = m;
    if (m > 12)
    {
    while (m > 12)
    {
    cout << "Input month <= 12! \n" << "Month: ";

    cin >> m;
    }
    month = m;
    }
    if ((m == 1) || (m == 3) || (m == 5) || (m == 7) || (m == 8) || (m == 10) || (m == 12))
    {
    while (d > 31)
    {
    cout << "Input day <= 31! \n" << "Day: ";
    cin >> d;
    }
    day = d;
    }
    if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
    {
    while (d > 30)
    {
    cout << "Input day <= 30! \n" << "Day: ";
    cin >> d;
    }
    day = d;
    }

    if ((y%4 == 0) && (m == 2))
    {
    while (d > 29)
    {
    cout << "Input day <= 29! \n" << "Day: ";
    cin >> d;
    }
    day = d;  
    }

    if ((y%4 != 0) && (m == 2))
    {
    while (d > 28)
    {
    cout << "Input day <= 28! \n" << "Day: ";
    cin >> d;
    }
    day = d;
    }
    year = y;

    }
    ostream& operator << (ostream& out, data& c)
    {
    switch (c.type)
    {
    case 1: return out<<setw(2)<<setfill('0')<<c.day<<'.'
    <<setw(2)<<setfill('0')<<c.month<<'.'
    <<setw(4)<<setfill('0')<<c.year;
    case 2: return out<<setw(2)<<setfill('0')<<c.month<<'/'
    <<setw(2)<<setfill('0')<<c.day<<'/'
    <<setw(4)<<setfill('0')<<c.year;
    case 3: cout<<setw(2)<<setfill('0')<<c.day<<'-';
    switch (c.month)
    {
    case 1:cout<<"JAN-";break;
    case 2:cout<<"FEB-";break;
    case 3:cout<<"MAR-";break;
    case 4:cout<<"APR-";break;
    case 5:cout<<"MAY-";break;
    case 6:cout<<"JUN-";break;
    case 7:cout<<"JUL-";break;
    case 8:cout<<"AUG-";break;
    case 9:cout<<"SEP-";break;
    case 10:cout<<"OCT-";break;
    case 11:cout<<"NOV-";break;
    case 12:cout<<"DEC-";break;
    }
    return out << setw(4) << setfill('0') << c.year;

    }
    return out;
    }

    bool operator == (const data& A, const data& B)
    {
    if ((A.day==B.day) && (A.month==B.month) && (A.year==B.year)) return true;
    else return false;
    }

    void data::InputData(char *str)    //Ввод данных с клавиатуры
    {
         char *tPtr;

    tPtr=strtok(str,".");
    day=atoi(tPtr);

    tPtr = strtok(NULL,".");
    month=atoi(tPtr);

    tPtr = strtok(NULL,".");
    year=atoi(tPtr);
    }

    int data::type;
    int main(int argc, char* argv[])
    {
    unsigned int day, month, year;

    cout << "Please make a choose the format of data: \n";
    cout << "1: DD.MM.YYYY \n2: MM/DD/YYYY \n3: DD-mon-YYYY \n";
    cin >> data::type;

    cout << "Input day, month and year of 1st date: ";
    cin >> day >> month >> year;
    data u(day, month, year);

    cout << u;

    cout << "\nInput day, month and year of 2nd date: ";
    cin >> day >> month >> year;
    data r(day, month, year);
    cout << r;
    if (u == r) cout << "\nDates are equal";
    else cout << "Dates aren't equal";

    getchar(); getchar();
    return 0;
    }
    //---------------------------------------------------------------------------
  •       Здравстуйте, помогите, пожалуйста, в написании программы. А точнее, дайте совет или намек.Моя программа должна выводить на экран разноцветные круги с вложенными квадратами. Они должны генерироваться в разных местах экрана и двигаться по прямым линиям. Так вот. Я немного в замешательстве: мне, получается, надо создать 2 класса, но как сделать так, чтобы углы квадрата лежали точно на окружности? :-/
          И еще: подскажите, как отмерить пройденный путь в пикселях? (второе задание этой программы)
         Заранее ОГРОМНОЕ спасибо  :) :) :) :-& и прошу не смеяться над вопросами, знаю, они возможно очень глупые, но я пока только-только начала осваивать программирование, а вопросов много))))
    Всем большое спасибо))))
         
  • Сортировка
    Помогите, пожалуйста, исправить ошибки в сортировке по очкам в следующей задаче.
    Составить программу, обеспечивающую ввод и сохранение на диске протокола игры в баскетболл. В ходе игры при забрасывании в кольцо очередного мяча фиксируется название команды, фамилия игрока, время, очки за мяч. Протокол игры выведите в в иде таблицы, содержащей графы: название команды, фамилия игрока, время, очки за мяч. Итоговой строкой таблицы должен быть общий счет.
    Программа должна обеспечивать вывод списка игроков, забросивших мячи, отсортированного одновременно по двум ключам: по наименованию команды и по фамилиям в алфавитном порядке(сортировка вставками), а также списка игроков, упорядоченного по убыванию кол-ва заброшенных игроком мячей(сортировка выбором по индексам, индекс соответствует индексу элемента в результирующем массиве после первой сортировки).
       
    Код:
    #include<stdio.h>
    #include<iostream.h>
    #include<conio.h>
    #include<string.h>
    #include<dos.h>
     
    typedef struct
     {
      char K[25], F[25];
      int V,O,T;
     }
      item;
     
    typedef struct
     {char K[25],F[25];
      int scores;
     } igrok;
     
    item st[50];
    igrok players[50];
    int ind_cnt, plr_cnt, ind_array[50];
     
    void swap(int arr[], int i, int j)
    {
        int tmp;
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
     
    void sort_shaker()
    {   int j, k = plr_cnt-1;
        int niz=1, verh=plr_cnt-1;
        do
        { for (j = niz; j <= verh; j++)
             { if (players[ind_array[j-1]].scores > players[ind_array[j]].scores)
               { swap(ind_array, j-1, j);
                    k = j;
               }
             }
             verh = k - 1;
             for (j = verh; j >= niz; j--)
             { if (players[ind_array[j-1]].scores > players[ind_array[j]].scores)
               { swap(ind_array, j-1, j);
                    k = j;
               }
             }
             niz = k + 1;
        } while (niz < verh);
    }
     
     
    //sortirovka po ochkam
    void selsort (int first, int last)
    {
      while (first < --last)
        {}
    }
     
    void SaveList(char* filename)
    {FILE *newfile;
     newfile = fopen(filename, "w");
     fwrite(&ind_cnt,4,1,newfile);
     for(int i=0;i<ind_cnt;i++)
      {fwrite(&st[i].K,1,25, newfile);
       fwrite(&st[i].F,1,25, newfile);
       fwrite(&st[i].V,4,1, newfile);
       fwrite(&st[i].O,4,1, newfile);
       fwrite(&st[i].T,4,1, newfile);
      }
     fclose(newfile);
    };
     
    void LoadList(char* filename)
    { FILE *newfile;
      newfile = fopen(filename, "r");
      fread(&ind_cnt,4,1,newfile);
      if(ind_cnt!=0)
      { for(int i=0;i<ind_cnt;i++)
        { fread(&st[i].K,1,25, newfile);
             fread(&st[i].F,1,25, newfile);
             fread(&st[i].V,4,1, newfile);
             fread(&st[i].O,4,1, newfile);
             fread(&st[i].T,4,1, newfile);
        }
      };
      fclose(newfile);
    };
     
    //sortirovka po komandam i familiyam
    void inssort()
    { int b,c,e,i,j,k;
      char aaa[50],bbb[50];
      igrok tmp;
      i=1;
      do
      { b=0;
        e=i-1;
        c=(b+e)/2;
        while(b!=c)
        { sprintf(aaa,"%s%s",players[c].K,players[c].F);
             sprintf(bbb,"%s%s",players[i].K,players[i].F);
             if(stricmp(aaa,bbb)>0 )
             { e=c;}
             else
             { b=c;}
             c=(b+e)/2;
        }
        sprintf(aaa,"%s%s",players[b].K,players[b].F);
        sprintf(bbb,"%s%s",players[i].K,players[i].F);
        if (stricmp(aaa,bbb)<0)
        { sprintf(aaa,"%s%s",players[i].K,players[b].F);
          sprintf(bbb,"%s%s",players[e].K,players[e].F);
          if (stricmp(aaa,bbb)>0)
          {
           b=e+1;
          }
          else
          {
           b=e;
          }
        }
     
        k=i;
        tmp=players[i];
     
        while(k>b)
        { players[k]=players[k-1];
             k=k-1;
        }
        players[b]=tmp;
        i=i+1;
      }
      while(i<plr_cnt);
    };
     
    void showtable()
    {  printf("\n|-------------------------|-------------------------|------|--------|-------|");
       printf("\n|        Familiya         |         Komanda         | Taim | Vremya | Ochki |");
       printf("\n|-------------------------|-------------------------|------|--------|-------|");
     
       int s1=0, s2=0;
       for (int i=0; i<ind_cnt;i++)
       { printf("\n|%-25s|%-25s| %3d  |  %3d   |  %3d  |", st[i].F, st[i].K, st[i].T, st[i].V, st[i].O);
            if(stricmp(st[0].K,st[i].K)==0)
              s1=s1+st[i].O;
            else
            { s2=s2+st[i].O;
            }
       }
      printf("\n|---------------------------------------------------------------------------|");
      printf("\n|                Obschiy schet: %3d:%3d                                     |", s1, s2);
      printf("\n|---------------------------------------------------------------------------|");
    }
     
    void plus(int ind,int plr)
    { for(int j=0;j<25;j++)
      {players[plr].F[j]=st[ind].F[j];
       players[plr].K[j]=st[ind].K[j];
      }
      players[plr].scores=players[plr].scores+st[ind].O;
    }
     
    void showtable2()
    {  printf("\nЙНННННННННННННННННННННННННЛНННННННННННННННННННННННННЛННННННН»");
       printf("\nє        Familiya         є         Komanda         є Ochki є");
       printf("\nМНННННННННННННННННННННННННОНННННННННННННННННННННННННОННННННН№");
     
       for (int i=0; i<plr_cnt;i++)
       { printf("\nє%-25sє%-25sє  %3d  є", players[i].F, players[i].K, players[i].scores);
       };
       printf("\nИНННННННННННННННННННННННННКНННННННННННННННННННННННННКНННННННј");
    }
     
    void showtable3()
    {  printf("\nЙНННННННННННННННННННННННННЛНННННННННННННННННННННННННЛННННННН»");
       printf("\nє        Familiya         є         Komanda         є Ochki є");
       printf("\nМНННННННННННННННННННННННННОНННННННННННННННННННННННННОННННННН№");
     
       for (int i=0; i<plr_cnt;i++)
       { printf("\nє%-25sє%-25sє  %3d  є", players[ind_array[i]].F, players[ind_array[i]].K, players[ind_array[i]].scores);
       };
       printf("\nИНННННННННННННННННННННННННКНННННННННННННННННННННННННКНННННННј");
    }
     
     
    void CreatPlrList()
    { char aaa[50],bbb[50];
      int yes;
      plr_cnt=1;
      players[0].scores=0;
      plus(0,0);
      for (int i=1; i<ind_cnt;i++)
      { yes=0;
        for (int j=0;j<plr_cnt;j++)
        {   if( stricmp(players[j].K,st[i].K)==0 && stricmp(players[j].F,st[i].F)==0)
               {plus(i,j);yes=1;}
        }
        if(!yes){++plr_cnt;players[plr_cnt-1].scores=0;plus(i,plr_cnt-1);}
      }
    };
     
    void main()
    { char s='0';
      char filename[]="igroki.dat";
     
      do{
      clrscr();
      FILE *f;
      f=fopen(filename,"r");
     
      if (f)
      { printf("\n Fail sushestvuet!!! Byberite deistvie: \n");
        do
        { printf("0 - sozdat fail zanovo: \n");
             printf("1 - dobavit dannye v sushchestvuyshchiy fail \n");
             printf("2 - pokazat' tablicu: \n");
             printf("3 - pokazat' tablicu po komandam i familiyam: \n");
             printf("4 - pokazat' tablicu po ochkam: \n");
             s=getche ();
        } while (s!='0'&&s!='1' &&s!='2' &&s!='3' && s!='4');
      }
      else
      { printf("\n Faila ne sushestvuet!!! Nagmite lyubuyu klavishu: \n");
        s=getche();
      }
      fclose(f);
     
      if (s=='1')LoadList("igroki.dat");
      if (s=='0'){ind_cnt=0;plr_cnt=0;}
      if (s!='2' && s!='3'&& s!='4')
      { do
        { ++ind_cnt;
             printf ("\n Familiya:"); cin >> st[ind_cnt-1].F;
             printf ("\n Komanda:"); cin >> st[ind_cnt-1].K;
             printf ("\n Taim:"); scanf ("%d", & st[ind_cnt-1].T);
             printf ("\n Vremya:"); scanf ("%d", & st[ind_cnt-1].V);
             printf ("\n Ochki (1/2/3):"); scanf ("%d", &st[ind_cnt-1].O);
             fflush(stdin);
             do
             { printf ("\n Prodolgit' vvod (y/n)");
               s=getche();
             } while (s!='n' && s!='y');
        } while (s=='y');
        SaveList("igroki.dat");
      }
      LoadList("igroki.dat");
      for(int i=0;i<ind_cnt;i++){ind_array[i]=i;}
      CreatPlrList();
      inssort();
      sort_shaker();
      clrscr();
      if(s=='2')showtable();
      if(s=='3')showtable2();
      if(s=='4')showtable3();
      cout << "\n\n0-exit, other-prodolzhit";
      s=getch();
      }while (s!='0');
    }
  • Учимся программировать :: Начинающим
  • Решил сделать сайт с названием "программирование для начинающих"
    Если кто когда-нибудь вбивал эту строку в Яндекс, то что вы хотели увидеть в идеале?
  • Всем привет!

    У меня такое задание:

    Составить программу для умноэения матрицы на вектор. Матрица и вектор задаются в своих класах. Операция умножения производится с использованием отдельного оператора. Данные считываются из файла. Результат записывается в выходной файл.
    Размер матрицы 3х3
    Размер вектора 1х3
    Элемент матрицы - целые числа.

    У меня получилось вот что:

    Код:
    #include
    <iostream.h>
    #include <fstream.h>

    struct vector{int el[3];};
    struct matrica{int el[3][3];};
    struct result{int el[3][3];};

    void main()

    {

       ifstream mfs("matrica.txt", ios::in);
       if (mfs.is_open())
          {
             cout<<"ok\n";
          } else {
             exit (0);
          }

       ifstream vfs("vector.txt", ios::in);

       ofstream rfs("result.txt", ios::out);

       int i, j;
       for (i=1; i<=3; i++)
       {
          for (j=1; j<=3; j++)
          {
             matrica.el[i][j] = mfs;
             vector.el[i] = vfs;
             result.el[i][j]=matrica.el[i][j]*vector.el[i];
             rfs = result.el[i][j];
             cout << rfs;
          }
       }

       return 0;
    }

    Но прога не компилится, спотыкаясь на шаге
    Код:
    matrica.el[i][j] = mfs;
    Что я делаю неправильно в обращении к членам класса?

    Тестить мне негде, вот это написала пока с компа не выгнали.
    Ещё я так и не поняла, как переопределять функцию?

    Жду помощи.
  • Когда писала махонькие школьные проги, всё получалось. Когда писала сортировку двусвязного списка - кайфовала от процесса. Но как только начались классы...У меня мозг отторгает всякую литературу :'( :'( :'(Скажите, может я зря связалась с программированием?
    Подскажите пожалуйста книгу простую по С++. Только не Страуструпа!
    Спасибо заранее.

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное