среда, 1 июня 2016 г.

Создание инфоблока "экзамены" . 1С Битрикс API

- Инфоблок "Расписание экзаменов" 
- Свойства для элементов этого инфоблока: 
- "Аудитория" тип целое число 
- "Преподаватель" тип строка 
- и 5 элеметов этого инфоблока с заполнеными полями: 
- Название (стандартное поле инфоблока) 
- Аудитория
- Преподаватель 
- Дата начала (стандартное поле инфоблока) 

__________________________________________



<?php

CModule::IncludeModule("iblock");

$ib = new CIBlock;

$IBLOCK_TYPE = "newb"; //тип инфоблока

$SITE_ID = "s1"; //сайт


// Настройка доступа

$arAccess = array(

"2" => "R", // Все пользователи

);

if ($contentGroupId) $arAccess[$contentGroupId] = "X"; // Полный доступ

if ($editorGroupId) $arAccess[$editorGroupId] = "W"; // Запись

if ($ownerGroupId) $arAccess[$ownerGroupId] = "X"; // Полный доступ


$arFields = Array(

"ACTIVE" => "Y",

"NAME" => "Расписание экзаменов",

"CODE" => "tm",

"IBLOCK_TYPE_ID" => $IBLOCK_TYPE,

"SITE_ID" => $SITE_ID,

"SORT" => "5",

"GROUP_ID" => $arAccess, // Права доступа

"FIELDS" => array(


// Символьный код разделов

"SECTION_CODE" => array(

"IS_REQUIRED" => "Y",

"DEFAULT_VALUE" => array(

"UNIQUE" => "Y",

"TRANSLITERATION" => "Y",

"TRANS_LEN" => "30",

"TRANS_CASE" => "L",

"TRANS_SPACE" => "-",

"TRANS_OTHER" => "-",

"TRANS_EAT" => "Y",

"USE_GOOGLE" => "N",

),

),

"DETAIL_TEXT_TYPE" => array( // Тип детального описания

"DEFAULT_VALUE" => "html",

),

"SECTION_DESCRIPTION_TYPE" => array(

"DEFAULT_VALUE" => "html",

),

"IBLOCK_SECTION" => array( // Привязка к разделам обязательноа

"IS_REQUIRED" => "N",

),

"LOG_SECTION_ADD" => array("IS_REQUIRED" => "Y"), // Журналирование

"LOG_SECTION_EDIT" => array("IS_REQUIRED" => "Y"),

"LOG_SECTION_DELETE" => array("IS_REQUIRED" => "Y"),

"LOG_ELEMENT_ADD" => array("IS_REQUIRED" => "Y"),

"LOG_ELEMENT_EDIT" => array("IS_REQUIRED" => "Y"),

"LOG_ELEMENT_DELETE" => array("IS_REQUIRED" => "Y"),

),


// Шаблоны страниц

"LIST_PAGE_URL" => "#SITE_DIR#/tm/",

"SECTION_PAGE_URL" => "#SITE_DIR#/tm/#SECTION_CODE#/",

"DETAIL_PAGE_URL" => "#SITE_DIR#/tm/#SECTION_CODE#/#ELEMENT_CODE#/",


"INDEX_SECTION" => "Y", // Индексировать разделы для модуля поиска

"INDEX_ELEMENT" => "Y", // Индексировать элементы для модуля поиска


"VERSION" => 1, // Хранение элементов в общей таблице


"SECTION_PROPERTY" => "Y", // Разделы каталога имеют свои свойства (нужно для модуля интернет-магазина)

);


$ID = $ib->Add($arFields);

if ($ID > 0)

{

echo "инфоблок успешно создан";

}

else

{

echo "ошибка создания инфоблока";

return false;

}



$propid1=0;

$propid2=0;


// Определяем, есть ли у инфоблока свойства

$dbProperties = CIBlockProperty::GetList(array(), array("IBLOCK_ID"=>$ID));

if ($dbProperties->SelectedRowsCount() <= 0)

{

$ibp = new CIBlockProperty;


$arFields = Array(

"NAME" => "Аудитория",

"ACTIVE" => "Y",

"SORT" => -777, // Сортировка

"CODE" => "Number",

"PROPERTY_TYPE" => "N", //


"IBLOCK_ID" => $ID

);

$propId = $ibp->Add($arFields);

if ($propId > 0)

{

$arFields["ID"] = $propId;

$propid1=$propId;

$arCommonProps[$arFields["CODE"]] = $arFields;

echo "&mdash; Добавлено свойство ".$arFields["NAME"]."<br />";

}

else

echo "&mdash; Ошибка добавления свойства ".$arFields["NAME"]."<br />";




/* сео-свойства */

$arFields = Array(

"NAME" => "Преподаватель",

"ACTIVE" => "Y",

"SORT" => -777,

"CODE" => "Name",

"PROPERTY_TYPE" => "S", // Строка


"IBLOCK_ID" => $ID,


);

$propId = $ibp->Add($arFields);

if ($propId > 0)

{

$arFields["ID"] = $propId;

$propid2=$propId;

$arCommonProps[$arFields["CODE"]] = $arFields;

echo "&mdash; Добавлено свойство ".$arFields["NAME"]."<br />";

}

else

echo "Ошибка добавления свойства ".$arFields["NAME"]."<br />";

}

else

echo "Для данного инфоблока уже существуют свойства<br />";




$el = new CIBlockElement;

for($i=0;$i<5;$i++){

$PROP = array();

$PROP[$propid1] = "Преподаватель".$i; //

$PROP[$propid2] = "Аудитория".$i;

$date = "31.05.2016 ".$i.":32:00";

$stmp = MakeTimeStamp($date, "DD.MM.YYYY HH:MI:SS");


$arLoadProductArray = Array(

"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем

"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела

"IBLOCK_ID" => $ID,

"PROPERTY_VALUES"=> $PROP,

"NAME" => "Предмет #".$i,

"ACTIVE" => "Y", // активен

"PREVIEW_TEXT" => "текст для предмета #".$i,

"DETAIL_TEXT" => "текст для детального просмотра элементa #".$i,

"ACTIVE_FROM" => $date,

"START_DATE"=> $date,

"DATE_ACTIVE_FROM"=>$date

);


if($PRODUCT_ID = $el->Add($arLoadProductArray))

echo "New ID: ".$PRODUCT_ID;


else

echo "Error: ".$el->LAST_ERROR;

}

?>

Обратная польская запись

Reverse Polish notation

Обратная польская нотация (ОПН) 
описание на вики

код PHP


<?php function polish($input){
$input=str_replace(" ","",$input);
for($i=0;$i<strlen($input);$i++){
 if(is_numeric($input[$i])){
  $stack[]=$input[$i];
  }
 else {
   $n2 = array_pop($stack);
   $n1 = array_pop($stack);
   switch($input[$i]) {
    case '+': $result = $n1 + $n2; break;
    case '-': $result = $n1 - $n2; break;
    case '*': $result = $n1 * $n2; break;
    case '/': $result = $n1 / $n2; break;
    default: echo "Ощибка ввода!\n";
   }
   array_push($stack,$result);
  }
 }
 return array_pop($stack);
}

echo polish("5 8 3 + *");?>

среда, 25 сентября 2013 г.

с++ / Задача Иосифа Флавия

Задача Иосифа (циклический список)

Описание задачи:
http://ru.wikipedia.org/wiki/Задача Иосифа


Решение (Перебором от http://cppalgorithms.blogspot.ru ) :


#include <iostream>
using namespace std;

class Node   //Узел связного списка
{
public:
int m_item;
Node *m_next;

Node(int item, Node *next){m_item = item, m_next = next;}
};

int main()
{
cout << "Enter number of people: ";
int numberOfPeople = 0;
cin >> numberOfPeople;

cout << "Enter interval: ";
int interval;
cin >> interval;

Node *first =new Node(1, 0); //Создаем первый узел. m_item содержит номер
first->m_next = first;       //и зацикливаем его на себя

Node *tmp = first;  //Указатель с которым будем работать в дальнейшем

for (int i = 2; i <= numberOfPeople; ++i)  //Создаем циклический список
{
tmp->m_next = new Node(i, first);
tmp = tmp->m_next;
}
while (tmp != tmp->m_next)    //Удаляем элемент через интервал
{
for (int i = 1; i < interval; ++i)
{
tmp = tmp->m_next;
}
Node *deleteNode = tmp->m_next;
tmp->m_next = tmp->m_next->m_next;

delete deleteNode;
}

cout << tmp->m_item << endl;  //Выводим оставшийся
}

/////////////////////////////////////////////////
Простая рекурсивная реализация (в 1-индексации):
int joseph (int n, int k) {
 return n>1 ? (joseph (n-1, k) + k - 1) % n + 1 : 1;
}
Нерекурсивная форма:
int joseph (int n, int k) {
 int res = 0;
 for (int i=1; i<=n; ++i)
  res = (res + k) % i;
 return res + 1;
}

с++ / Остатки

Остатки. Задумано целое число Х. Известны числа k, m, n – остатки от деления этого числа на 3, 5, 7 соответственно. Найдите число Х.

#include <iostream>
using namespace std;
int main()
{
int k,m,n,p;
cin>>k>>m>>n;
cout<<"interval";
cin>>p;
for(int x=0; x<p; x++) 
{
  if ((x%3)==k && (x%5)==m && (x%7)==n)
  {
    cout<<x<<endl;
  }
}

return 0;
}

c++ / диагональ прямоугольника

//Прямоугольник, стороны которого выражены натуральными числами M и N ,
//разделен на квадраты размером 1 x 1. Найти число квадратов, пересекаемых диагональю
//прямоугольника (пересекает только тогда, когда делит его на две произвольные части).

#include <iostream>
using namespace std;
int  euclid(int  A, int  B)
{
   // return B ? euclid(B, A % B) : A;
if (B)
  return euclid(B, A % B);
else
  return A;
}

int  chislo_kvad(int A, int B )
{
    return A + B - euclid(A, B);
}

int main()
{
    std::locale::global(std::locale(""));
    std::cout << "стороны прямоугольника:"
              << std::endl
              << '\t'
              << "A = ";

    int  A = 0;
    std::cin >> A;
    std::cout << '\t'
              << "B = ";
    int  B = 0;
    std::cin >> B;

    std::cout
              << chislo_kvad(A, B)
              << " квадратов."
              << std::endl;
}*/

с++ / последовательность 1 22 333 4444

Вычислить n-ый член последовательности натуральных чисел 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, … по заданному n.
#include <iostream>
using namespace std;
int main()
{
int a,b,k;
cin>>a;
if(a<1)
{
cout<<"FALSE";
}
else
{
k=1;
b=0;
while(b<a)
{
b=b+k;
k++;
}
cout<<k-1<<endl;
}

return 0;
}

с++ / текст (от n до m)

Дан текстовый файл, содержащий буквенные и цифровые символы. Требуется скопировать часть файла с позиции n до позиции m в поток и посчитать в этой части количество цифровых символов.

#include <fstream>
#include <iostream>
using namespace std;
int main()
{   
    ifstream ifs("1.txt");
    if(!ifs) 
    {
        cerr << "File error." << endl;
        return 1;
    }
    
    int n, m;
    do
    {
        (cin >> n >> m).get();
    } 
while (n < 0 || m < 0 || m <= n);
    ifs.seekg(n);
    int kol = 0;
    char temp;
    while(ifs.get(temp))
    {
        if(isdigit(temp))
        {
            kol++;
            cout << temp << ' ';
        }
        ++n;
        if (n == m) break; 
    }
    cout << endl << kol << endl;
    cin.get();
    return 0;
}