X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

9 страниц V   1 2 3 4 5 6 7 8 9 >
Открыть тему
Тема закрыта
> РЕШЕНИЯ задач на PHP для начинающих, решение задач
Banderas
Banderas
Topic Starter сообщение 12.1.2011, 23:02; Ответить: Banderas
Сообщение #1


Есть тема Задачи на PHP для начинающих. Решил создать тему, в которой будут РЕШЕНИЯ задач на PHP для начинающих. Конечно же в теме могут быть обсуждения, поправки, дискуссии и так далее. Поэтому для того, что бы визуально лучше воспринимать задачу, предлагаю оформлять решения задач следующим образом.


1) копируем название задачи с темы "Задачи на PHP для начинающих". Цвет #0000FF, размер шрифта 3.

[size="3"][color="#0000FF"]Задача №4(работа с файлами)[/color][/size]


2) копируем условие задачи как цитата

3) вставляем код решения задачи. Желательно с комментариями. Можно алгоритм и т.д. по желанию.. Обязательно!!! использовать подсветку кода


Может как-то скрыть код? Что бы смотреть решение именно той задачи, которая интересует.

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


Пожалуй я начну. Я делал не по книгам, но это почти аналог.


Задача №4(работа с файлами)

Имеется файл с содержимым (книга|автор|издательство|состояние) например:

PHP 5 объектно-ориентированное программирование|Шишов Алексей|БХВ|1

MySQL: неподъемная книга разработчика|Шишов Алексей|БХВ|0

Справочник всего Г в России|Пупкин Вася|Пупкин и к0|1

Книга для домохозяек|Хозяйка Лидия|Домхоз|1

Телевидение в каждой коморке|Телестанция СССР|КВС+|0



Нужно написать 3 функции.

1) Функция, считывающая из файла построчно данные и разбила их на многомерный массив вида:

array(

array(title => [книга], author => [автор], print => [издательство], status => [состояние]),

array(title => [книга], author => [автор], print => [издательство], status => [состояние]),

array(title => [книга], author => [автор], print => [издательство], status => [состояние]),

);


Выходные данные: массив книг.

2) Функция, обрабатывающая массив книг и возвращающая книги с запрошенным состоянием. Поле состояния отвечает за публикацию, опубликована книга или нет.

3) Функция, выводящая список книг в удобочитаемой форме.



Решение задачи..

у нас есть файл orders.txt с содержимым

01:44:46 31st    3 покрышек    2 масла    12 свечей     всего: $441.6    

01:45:30 31st    12 покрышек    4 масла    34 свечей     всего: $1651.2    

19:45:58 1st    3 покрышек    5 масла    23 свечей     всего: $530.4    

19:48:39 1st    5 покрышек    34 масла     1 свечей     всего: $1012.8    

20:01:10 1st    32 покрышек    1 масла    12 свечей     всего: $3909.6    

20:01:10 1st    32 покрышек    1 масла    12 свечей     всего: $3909.6    

20:04:36 1st    2 покрышек    23 масла     45 свечей     всего: $732


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


1) Считываем данные и выводим

[php]$D_ROOT = $_SERVER['DOCUMENT_ROOT'];

$fp = fopen("$D_ROOT/../www/orders/orders.txt", 'rb'); // открываем файл с параметрами read

while (!feof($fp)) { // пока не достигли конца файла

$order[] = fgets($fp); // считываем построчно файл orders.txt и заполняем массив $orders[]

}

fclose($fp);


echo "<pre>";

print_r($order); // выводим наш массив

echo "</pre>";[/php]


3) Выводим данные в удобочитаемом виде

[php]<html>

<head>

<title>Обзор заказов</title>

</head>

<body>

<h2>Автозапчасти от Боди;)</h2>

<h3>Заказы клиентов</h3>

<?php

$header = array('Дата', 'Покрышки', 'Масла', 'Свечи', 'Сумма');


echo <<<HTML

<table border='0' cellspacing='10'>

<tr bgcolor='e7e7e7'>

HTML;


foreach($header as $key => $value) echo "<td>$value</td>";

echo "</tr>";


$D_ROOT = $_SERVER['DOCUMENT_ROOT'];

$orders = file("$D_ROOT/../www/orders/orders.txt"); // file() заносит данные из указанного файла в массив

н

for ($i=0;$i<count($orders);$i++) {

$line = explode("\t", $orders[$i]); // разбиваем строку на подстроки, которые отделены знакому табуляции \t

for ($k=1;$k<4;$k++) $line[$k] = intval($line[$k]);

echo "<tr>";

for ($j=0;$j<count($line);$j++) echo "<td>$line[$j]</td>";

echo "</tr>";

}

echo "</table>";


?>

</body>

</html>[/php]


2) не делал, в этом ничего сложного нет, простое условие. В своей задачи у меня небыло такой цели, поэтому не делал. Хотя если будет время, то на днях допишу.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 14.1.2011, 14:53; Ответить: matroskin8
Сообщение #2


Решил поддержать тему ;)
Ну, и решил первую задачу :)
Итак, Задача №1(математическая)
Рассчитать скорость движения машины и вывести её в удобочитаемом виде. Осуществить возможность вывода в км/ч, м/c.
Исходные данные: Пройденный путь - S; Время движения - t.
Представить решение задачи с помощью одной функции.

Решение задачи:
1) сама функция будет такой:
[php]function speed($s, $t, $val){
$speed[1] = $s / $t . " км/ч";
$speed[2] = $speed[1] / 3.6 . " м/с";
return $speed[$val];
}[/php]
Функция имеет 3 аргумента - пройденный путь, время движения и 3-ий аргумент отвечает за пользовательский вариант вывода расчета (км/ч или м/c). В массив $speed попадает 2 варианта расчета, а возвращает ф-ция 1 вариант в зависимости от того, что выбрал пользователь.
2) осуществляем минимальную проверку полученных данных:
[php]if(!empty($_POST['submit'])){
if($_POST['S'] <= 0 || $_POST['t'] <= 0){
$_SESSION['error'] = '<strong><em>Число должно быть больше нуля</em></strong>';
header("Location: index.php");
exit();
}else{
$_SESSION['res'] = "<strong><em>" .speed($_POST['S'], $_POST['t'], $_POST['val']). "</em></strong>";
header("Location: index.php");
exit();
}
}[/php]
Если попало что-то кроме числа с плюсом (1, 2, 50.5 и т.д.) или ноль, то нам это не подходит и в сессионную переменную error мы заносим соответствующее сообщение. Если число нас устраивает, то в $_SESSION['res'] заносим результат работы ф-ции.
3) выводим результат и уничтожаем сессию:
[php]<?php
echo $_SESSION['error'];
echo $_SESSION['res'];
session_unset();
session_destroy();
?>[/php]
4) ну и код самой формы:
<form method="post" action="">
<table>
<tr>
<td>Пройденный путь (км):</td> <td><input type="text" name="S" /></td>
</tr>
<tr>
<td>Время движения (ч):</td> <td><input type="text" name="t" /></td>
</tr>
<tr>
<td><input type="radio" name="val" value="1" checked="checked" /> км/ч</td> <td><input type="radio" name="val" value="2" /> м/с</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Рассчитать" /></td>
</tr>
</table>
</form>

Вот полный код скрипта:
[php]<?php
session_start();

function speed($s, $t, $val){
$speed[1] = $s / $t . " км/ч";
$speed[2] = $speed[1] / 3.6 . " м/с";
return $speed[$val];
}

if(!empty($_POST['submit'])){
if($_POST['S'] <= 0 || $_POST['t'] <= 0){
$_SESSION['error'] = '<strong><em>Число должно быть больше нуля</em></strong>';
header("Location: index.php");
exit();
}else{
$_SESSION['res'] = "<strong><em>" .speed($_POST['S'], $_POST['t'], $_POST['val']). "</em></strong>";
header("Location: index.php");
exit();
}
}
?>

<h3><ins>Рассчет скорости</ins></h3>

<?php
echo $_SESSION['error'];
echo $_SESSION['res'];
session_unset();
session_destroy();
?>
<form method="post" action="">
<table>
<tr>
<td>Пройденный путь (км):</td> <td><input type="text" name="S" /></td>
</tr>
<tr>
<td>Время движения (ч):</td> <td><input type="text" name="t" /></td>
</tr>
<tr>
<td><input type="radio" name="val" value="1" checked="checked" /> км/ч</td> <td><input type="radio" name="val" value="2" /> м/с</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Рассчитать" /></td>
</tr>
</table>
</form>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Гость_0_* Гость_0_*
сообщение 14.1.2011, 18:25; Ответить: Гость_0_*
Сообщение #3


matroskin8 и Banderas, я не уверен, что нужны решения. Обычно толку от них мало, так как люди быстро сдаются и подглядывают в решения, когда лучше дольше подумать и решить самостоятельно.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 14.1.2011, 18:41; Ответить: matroskin8
Сообщение #4


(admin @ 14.1.2011, 16:25) *
matroskin8 и Banderas, я не уверен, что нужны решения. Обычно толку от них мало, так как люди быстро сдаются и подглядывают в решения, когда лучше дольше подумать и решить самостоятельно.

Ну это как посмотреть ;) По себе знаю, что если мне интересно решить какую-то задачу (именно для себя, чтобы чему-то научиться), то в решения я полезу только тогда, когда промучаюсь довольно долго и дойти до решения самостоятельно у меня просто не получится... вот тогда для меня решение будет совсем не лишним.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 14.1.2011, 18:52; Ответить: sc2r2bey
Сообщение #5


Решения интересны в тех случаях, когда обсуждаются они


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 14.1.2011, 19:00; Ответить: matroskin8
Сообщение #6


(surfer @ 14.1.2011, 16:52) *
Решения интересны в тех случаях, когда обсуждаются они

Согласен ;) поэтому Banderas и писал:
(Banderas)
Конечно же в теме могут быть обсуждения, поправки, дискуссии и так далее.

Кроме того, вполне возможно, что кто-то решает задачи темы и, решив какую-либо задачу, захочет сравнить свое решение с решением из этой темы... вполне возможно, что он увидит решение задачи другим способом и почерпнет для себя, соответственно, что-то новое... а может быть и так, что его решение окажется более элегантным, и он представит свое решение, чтобы уже другие могли чему-то поучиться у него.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 14.1.2011, 19:22; Ответить: sc2r2bey
Сообщение #7


ну да, единственное у нас тут вяленько и не получиться как хочется ;)


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 15.1.2011, 12:24; Ответить: Banderas
Сообщение #8


admin, я в школе по решениям из ГДЗ изучал тему, если что-то не понимал)). На примерах так-же модно научиться.
matroskin8, спасибо за поддержку ;)
surfer, ничего... я буду решать нерационально, а деды будут меня выправлять :)

Задача №6(работа с файлами и формой)
Есть форма с одним полем и кнопкой отправки. Поле, в которое вводится ссылка заполняется пользователем и отсылается на обработку.
Файл-обработчик получает ссылку, проверяет нет ли ещё такой в базе(файле) и заносит её в конец файла.

Формы:
<html>
<head>
<title>Страничка с формой</title>
</head>
<body>
<form action='zad6_h.php' method='post'>
<input type='text' name='text' size='50' />
<br><input type='submit' name='ok' />
<input type='reset' value='Сбросить' />
</form>
</body>
</html>

Обработчик:
[php]<?php
!isset($_POST['ok']) ? exit : ''; // если не нажали кнопку "отправить", то не обрабатываем запрос

$url = $_POST['text'];
if (empty($url)) exit; // если не ввели ссылку - выходим из обработчика

$D_ROOT = $_SERVER['DOCUMENT_ROOT'];
$url .= "\r\n"; // добавляем символы переноса строки
$file = "$D_ROOT/../www/files/zad6.txt";

$fp = fopen($file, 'a+b'); // открываем zad6.txt для записи/создания/чтения в бинарном режиме
((filesize($file) == 0) ? fwrite($fp, $url) : ''); // если файл пуст - просто записываем ссылку

$fl = file($file); // создаем массив из всех строк, что в файле zad6.php

foreach ($fl as $isurl) {
strcasecmp($url, $isurl) == 0 ? $flag=true : ''; // если такая ссылка уже есть в файле, ставим указатель
}
!$flag ? fwrite($fp, $url) : ''; // если ссылки нет (выходя из логики выше), записываем ссылку в конце файла
fclose($fp);

readfile($file); // считываем файл для удобства
?>[/php]
Обработчик написан не рационально, но работает. У кого какие варианты ещё будут?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 15.1.2011, 14:51; Ответить: Banderas
Сообщение #9


Задача №5(работа с файлами)
Написать счетчик открытия для одной страницы. Количество открытий страницы хранится в txt-файле в виде числа.
[число открытия страницы]
После каждого 10 открытия страницы, выводить приветственное сообщение на экран.


Для удобства записывал просто цифру в таком виде 15, а не в таком [15]. Но скобки не проблема, легко убираются функцией intval()
[php]<?php
$D_ROOT = $_SERVER['DOCUMENT_ROOT'];

@ $count = file_get_contents("$D_ROOT/../www/files/zad5.txt"); // содержимаое файла, @ - не показывает ошибку
$count ? $count++ : $count=1; // если файл открылся - увеличим значение на 1. Если нет - счетчик равен 1

file_put_contents("$D_ROOT/../www/files/zad5.txt", $count); // перезаписать содержимое файла

($count % 10 == 0) and ($count != 0) ? print ('Ура! Вы котрыли эту страницу уже ' // выводим сообщение
.$count.' раз, не надоело тут шастаться?') : '';
?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 15.1.2011, 15:26; Ответить: Banderas
Сообщение #10


Задача №13 ("Перевертыш", работа со строками)
Вводиться слово, выводиться его перевертыш. Например: "перевертыш" => "шытревереп".


Решение задачи:
[php]<?php
isset($_POST['ok']) ? '' : exit; // если нажали кнопочку ...

$re = $_POST['re'];

if (!empty($re)) // если ввели строку (заполнили форму)
{
for ($i=strlen($re);$i>=0;$i--) { // перебираем символы строки справа на лево
$good[] = $re[$i]; // и заноси их в массив
}
foreach ($good as $value) echo $value; // шытревереп шан мидовыВ
}
?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
9 страниц V   1 2 3 4 5 6 7 8 9 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) ВНИМАНИЕ: OnClickA - надежная рекламная сеть для вебмастеров и рекламодателей 🔥 Монетизируй любой трафик 🔥
Выкупим весь твой трафик. Повышенные выплаты для топовых паблишеров &#
6 OnClickA 1945 Вчера, 17:15
автор: OnClickA
Открытая тема (нет новых ответов) ✅ sms.chekons.com - ⭐ Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" ⭐
Сервис для получения SMS на реальные номера USA
9 Chekon 3367 Вчера, 13:24
автор: Chekon
Горячая тема (нет новых ответов) AviTool - мощный инструмент для автоматизации работы с Avito
90 Shadow 76512 15.3.2024, 22:07
автор: Shadow
Открытая тема (нет новых ответов) Получение гос. гранта для IT сферы
2 metvekot 933 15.3.2024, 11:08
автор: Skyworker
Открытая тема (нет новых ответов) Atlantic 2.0 - для безлимитного решения кликами Recaptcha и кликовой капчи Яндекс
3 waterworld 1502 14.3.2024, 12:29
автор: waterworld


 



RSS Текстовая версия Сейчас: 19.3.2024, 12:18
Дизайн