<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Первое точно не так делается. Логика примерно такая:
Показать
Но ЕГЭ штука такая, им не всегда подходит более простое решение.
Да, я написал: не читайте, будем переделывать. За идею спасибо, хотел переделать как ниже, но Ваш вариант лучше.
Если ПервоеЧисло > ВтороеЧисло Тогда
Если ПервоеЧисло > ТретьеЧисло Тогда
Иначе
КонецЕсли
Иначе
Если ВтороеЧисло > ТретьеЧисло Тогда
Иначе
КонецЕсли
КонецЕсли
(2) поторопился, там даже от одного условия можно избавится:
Показать
Но меня не отпускает ощущение, что скрыт какой-то подвох в задании. 🙂
(3)
правильные ощущения. Условия: «Нахождение минимума и максимума …»
(2)
Показать
Задание 8 (на паскаль думаю сами интерпретируете):
Показать
(4) да как бы понятно, что на минимум нужно операций по аналогии добавить, я не об этом.
(5) Без использования массивов и циклов же ?
(7) за однократный проход массива же?
(5) Когда элемент МассивЧисел[Сч] сравниваем с ПервоеМакс и ВтороеМакс, то элемент может изменить ВтороеМакс или обе переменные, а здесь только одно условие.
(4) а зачем так много кода?
Показать
(10) я между прочим, на публикацию вдохновился после вашей заметки о пузырке. : -)))
(9) если честно, то ничего не понял 🙂 элемент массива не сравнивается со вторым максимальным, только с первым. Второе максимальное сравнивать ни с чем не нужно.
(10) Ваш код вообще не скомпилится. min() и max() находятся в отдельной библиотеке, которую не факт, что можно использовать на ЕГЭ.
(13) можно заменить на «if ent_num > max_num then max_num := ent_num;»
Показать
(14) и? Чем этот код лучше моего? Лишним if?
(15) отсутствием лишних переменных и читаемостью как минимум.
(16) спорное утверждение. Куча readLn внутри когда не способствуют лучшей читаемости этого кода.
(17) каждому свое. Веток ветвления у Вас тоже 6, если считать блок «else». Блоки зачем-то, которые совершенно не нужны. Лишние переменные — это всегда минус баллы на олимпиадах. Но ведь главное, чтобы работало, да? А вот проверяющим ЕГЭ читаемость будет важнее.
Да, немногие помнют ужо линейку ДВК и славного её дитёныша БК-0010. Там оно изо всех щелей 😉
А вот по заветам Никлауса Вирта — процедурное программирование!
Показать
(12) из массива {2,1,5,4,3} нужно выбрать второй по-минимуму 2 или второй по-максимуму 4. Код из статьи мы проверяли.
(21) и все равно не пойму сути вашего замечания — что не так то? Алгоритм находит второе максимальное число в массиве (доработать под второе минимальное сложности не составит). Или вас смущает вывод сообщения о первом максимальном? Закомментируем его, так и быть. Если не нравится генерация массива — так это для проверки работоспособности. Можно задать фиксированным массив, суть не поменяется.
Показать
Кстати, по поводу квадратного уравнения, то эту задачу вроде бы все должны были в школе еще решать:
Кстати, есть такой ресурс — codewars.com — там много интересных задачек.
Тут на инфостарте есть статья по сортировке массивов там есть «Гномья сортировка» которая за один цикл (без вложенных) сортирует массив , поэтому поиск 2-го максимума или минимума можно построить на ней , тогда 1, 2-ой элемент будут 2-мя минимумами , а последний и предпоследний 2-мя максимумами
4. Алгоритм «Гномья сортировка».
Гномья сортировка основана на технике, используемой обычным голландским садовым гномом (нидерл. tuinkabouter). Это метод, которым садовый гном сортирует линию цветочных горшков. По существу он смотрит на следующий и предыдущий садовые горшки: если они в правильном порядке, он шагает на один горшок вперёд, иначе он меняет их местами и шагает на один горшок назад. Граничные условия: если нет предыдущего горшка, он шагает вперёд; если нет следующего горшка, он закончил.
Дик Грун
Вот собственно и все описание алгоритма «Гномья сортировка». Что интересно, алгоритм не содержит вложенных циклов, а сортирует весь массив за один проход.
Показать
(22) Мы разошлись в понимании «второй максимальный» я себе представлял, что среди всего массива выбрать максимум, убрать его из рассмотрения, выбрать еще раз максимум — это будет ответ. А Вы представляете, что максимум должен быть локальным.Проверю еще раз условия задачи. В любом случае, спасибо.
(24) у меня узкие интересы: нужно подготовить к ЕГЭ, но ресурс посмотрю.
(28) 30 секунд, однако… Странные задачи.
(29)Это из серии загадок, на которые дети отвечают за пару секунд, а взрослые — за пару часов
давайте сложнее
(30) Вчера?
(25)
Очень лукавая формулировка. Цикл-то один, но «одним проходом» это назвать никак нельзя.
(30) Послезавтра ?
(31)
(33)
Гугл в помощь ) Я тоже не решил
(26) все я понял, где собака зарыта 🙂
Исправленный код:
Показать
176 513
218 744
43 703
47 903
97 444
101 496
41 990
80 967
58 865
Первое: 218 744
Второе: 176 513
37 123
150 385
125 813
55 515
75 692
13 475
160 673
32 414
232 288
Первое: 232 288
Второе: 160 673
(25) мы алгоритмы сортировок в институте изучали 🙂
(33)
(25) Слыхал что когда нужно быстро на коленке сообразить хоть какую-то сортировку, то сортировка Шелла хороший кандидат. Типа золотой середины между более эффективными но более сложными алгоритмами и более медленными «учебными» алгоритмами.
(35) да, у нас также получилось. Только мы не использовали, что числа неотрицательные, поэтому присваиваем не нули, а первые элементы.
(30) В массиве дат, отсортированном по убыванию.
(39) ну вместо 0 можно присвоит обоим переменным значение первого элемента массива, а сам цикл начать со второго элемента — результат будет тем же, а условий меньше. Ну и в самом цикле поиска в вашем примере на одно условие больше, можно обойтись всего двумя.
(30) В самолете?
(30) сначала думал, что в календаре, оказалось, что в словаре. Ну тоже неплохо…
(20) кстати, рекурсия — это не цикл!
Показать
(2)
По моему это самый простой и короткий способ искать мин и макс а вообще если есть встроенная функция max и min то тогда код получается еще короче т.е. сама функция не нужна
Function Max (a,b)
begin
If a>b then
return a
else
return b;
end;
Procedure FindMaxValue ()
var maxValue,a,b,c,d:int;
begin
writeln(‘Последовательно введите четыре числа, которые необходимо сравнить’);
readln(a, b, c, d);
maxValue = Max (Мax(a,b),Мax(с,d));
end;
(45) в идеале что-то такое получается:
А почему такая дискриминация — только сыновья? У меня дочка в прошлом году готовилась к информатике и ИкТ, успешно сдала. Не буду поддерживать 🙂
(1) В контрольных заданиях всё подробно расписано. В последней задаче за простое решение (перебором) дают 2 балла, за сложное 4 балла. Все методисты и здравомыслящие люди советуют решать на 2 балла, ибо при сложном решении есть высокая вероятность накосячить и не получить ни одного бала.
(47) Исправил в статьеhttps://infostart.ru/public/983886/ . Вместо «Отец, Сын» вставил «Родитель, Ребенок».
(1)
Попарное сравнение может
Показать