Перейти к содержимому

Сервис обмена электронных валют


РЕШЕНИЯ задач на PHP для начинающих

#31 Damir

Damir
  • Пользователь
  • 2 сообщений
  • Репутация: 0
0

Отправлено 31 Март 2011 - 18:39

Banderas, Мне кажется ваше решение задачи не правильно, не соблюдено условие задачи. Не получен многомерные массив.
  • 0

#32 Damir

Damir
  • Пользователь
  • 2 сообщений
  • Репутация: 0

Отправлено 31 Март 2011 - 18:52

Предложу свое решение
Задача №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) Функция, выводящая список книг в удобочитаемой форме.


Решение:

Есть три файла array.php, zagolovok.php, ff.txt
Содержание файла array.php
<!-- 
Создаем форму с выпадающим списком и переменной "status"
c выбором значений (yes,not,all) переменной из списка
-->
<form action="array.php" method="get">
<select size="1" name="status">
<option value="yes">Опубликованные</option>
<option value="not">Не опубликованные</option>
<option value="all">Все книги</option>
</select>
<input type="submit" value="Просмотреть" />
</form>

<?php

function arr(){

$file = file("ff.txt"); //Заносим строки из файла в массив
$arraykey = array('title', 'author', 'print', 'status'); //Создаем массив для ключей многомерного массива
for ($i=0; $i < count($file); $i++){ //Делаем цикл, где count($file) выдает кол-во эллементов массива $file

$arr[$i]=explode("|", $file[$i]); // В цикле создаем нов. массив, уже многомерный.
$arr[$i] = array_combine($arraykey, $arr[$i]); //Комбинируем массивы $arraykey, $arr[$i] и получаем ассоциативные массивы
}

return $arr; //Возвращаем функции arr() наш многомерный массив
}


function publication (){

if ($_GET['status'] == 'yes'){ //Если в нашей форме переменная 'status' равна 'yes', то

include ('zagolovok.php'); //Вставляем повторяющийся кусок кода из файла zagolovok.php

for($i = 0; $i < count($arr); $i++){ //Делаем цикл, где count($arr) выдает кол-во эллементов массива $arr

foreach ($arr[$i] as $value) //Делаем цикл, который будет проходить по значениям ассоциативных массивов

echo "<tr>"; //Открываем строку в таблице

if ($value == 1){ //Если значение ассоциативного массива равно 1, то

$arr[$i]['status'] = 'Опубликованно'; //Меняем значение $arr[$i]['status']=1 на значение 'Опубликованно'

foreach ($arr[$i] as $value){ //Бежим опять по значениям ассоциативного массива, но только со статусом 'Опубликованно'

echo "<td>$value</td>"; //Выводим значения ассоциативного массива в столбце
}
}
echo "</tr>"; //Закрываем строку в таблице

}
echo "</table>"; //Закрываем в таблицу
}

/**
* Дальше комментировать не буду все аналогично выше описанному
*/

if ($_GET['status'] == 'not'){

include ('zagolovok.php');

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

foreach ($arr[$i] as $value)

echo "<tr>";

if ($value == 0){

$arr[$i]['status'] = 'Не опубликованно';

foreach ($arr[$i] as $value){

echo "<td>$value</td>";
}
}
echo "</tr>";

}
echo "</table>";
}

}

function output (){

if ($_GET['status'] == 'all'){

include ('zagolovok.php');

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

echo "</tr>";

foreach ($arr[$i] as $value){

if ($value == 1){

$arr[$i]['status'] = 'Опубликованно';
}

if ($value == 0){

$arr[$i]['status'] = 'Не опубликованно';

}
}
foreach ($arr[$i] as $value){

echo "<td> $value </td>";


}
echo "</tr>";
}
echo "</table>";
}
}

publication();
output();

?>


Содержание файла zagolovok.php
<?php

$arr = arr();

$zagolovok = array('Название','Автор', 'Издательство', 'Состояние');
echo "<table border = '1px' cellspacing='0' cellpadding='5'><tr>";

foreach($zagolovok as $value) {
echo "<td> <b>$value</b> </td>";
}
echo "</tr>";

?>


Содержание файла ff.txt
PHP 5 объектно-ориентированное программирование|Шишов Алексей|БХВ|1
MySQL: неподъемная книга разработчика|Шишов Алексей|БХВ|0
Справочник всего Г в России|Пупкин Вася|Пупкин и к0|1
Книга для домохозяек|Хозяйка Лидия|Домхоз|1
Телевидение в каждой коморке|Телестанция СССР|КВС+|0


Результат работы:
Изображение
Изображение
Изображение
Сильно не ругайте если, что не так. Я начинающий, всего 1,5 недели, как php изучаю.
Буду рад конструктивной критике.
  • 0

#33 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Апрель 2011 - 22:14

Damir, здравствуйте.
У вас ужасная вложенность массивов при выводе данных, которая ну никоим образом даже не нужна. Вообще задача состояла не в выводе данных, а в формировании массива из данных, которые затем можно было вывести с помощью var_dump() или print_r().
for($i = 0; $i < count($arr); $i++){

echo "</tr>";

foreach ($arr[$i] as $value){

if ($value == 1){

$arr[$i]['status'] = 'Опубликованно';
}

if ($value == 0){

$arr[$i]['status'] = 'Не опубликованно';

}
}
foreach ($arr[$i] as $value){

echo "<td> $value </td>";


}
echo "</tr>";
}

Можно заменить на:
foreach($arr as $book)
{
$html .= "<tr>";

foreach ($book as $key => $value)
{
if( $key == 'status' )
$html .= "<td>". ($value == 1) ? "Опубликовано" : "Не опубликовано" ."</td>";
else
$html .= "<td>$value</td>";
}

$html .= "</tr>";
}

Теперь по структуре:
Учитесь делать функции более универсальными, что они у вас вызываются без параметров. А если вам надо считать 2 файла или больше, 10 функция для этого создавать?
Так же, если это не нужно, не разбивайте скрипт на кучу файлов. Вот скажите, что делает ваш файл - zagolovok.php и почему вы его так назвали?
Старайтесь выдерживать отступы, чтобы код был читаем. И пользуйтесь либо 2-3 пробелами, либо табуляцией (кнопка Tab в редакторе).

И под конец ужаснуло:
1) разбиение вывода на 2 функции (publication, output), не понятно по каким причинам.
2) код вывода всех, только опубликованных или только неопубликованных можно было сделать все в одном куске, а вы их разбили аж на целых три.
  • 0

#34 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 26 Август 2011 - 23:04

Решаем... решаем...
  • 0

#35 lazar

lazar
  • Пользователь
  • 1 сообщений
  • Репутация: 0

Отправлено 15 Октябрь 2011 - 22:12

Задача №13 ("Перевертыш", работа со строками)

Вводиться слово, выводиться его перевертыш. Например: "перевертыш" => "шытревереп".


Здраствуйте. Пару дней изучаю php. До программирования форм еще не дошел. Хочу предложить свое решение с использованием файла. Данный код переворачивает любой текст из файла "myfile.txt" и выводит его в окошке браузера.

<?php
$naooborot="myfile.txt";
$a=fopen($naooborot, "r");
$b=fread($a, filesize($naooborot));
$itog=strrev($b);
fclose ($a);
echo $itog;
?>

  • 0

#36 Aleks-prog

Aleks-prog
  • Пользователь
  • 7 сообщений
  • Репутация: 0

Отправлено 11 Ноябрь 2011 - 14:19

Задача №19(работа с массивами)

Может и не совсем соотв-т первому условию, но сделал так:

пузырьком как учили,

	$arr = array(1,2,3,8,14,89,45);

for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1;$j++){
if($arr[$j]<$arr[$j+1]){
$tmp=$arr[$j+1];
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
foreach($arr as $key=>$value){
echo "Элемент ".$key." равен ".$value."<br>";
}

  • 0

#37 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 11 Ноябрь 2011 - 16:49

Задача №19(работа с массивами)

Может и не совсем соотв-т первому условию, но сделал так:

пузырьком как учили,

	$arr = array(1,2,3,8,14,89,45);

for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1;$j++){
if($arr[$j]<$arr[$j+1]){
$tmp=$arr[$j+1];
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
foreach($arr as $key=>$value){
echo "Элемент ".$key." равен ".$value."<br>";
}

Aleks-prog,
вообще-то по условиям задачи требуется не сортировка массива, а перестановка массива задом наперед.
Т.е. задача сама по себе простейшая и вся сложность в соблюдении условий. ;)
  • 0

#38 Aleks-prog

Aleks-prog
  • Пользователь
  • 7 сообщений
  • Репутация: 0

Отправлено 12 Ноябрь 2011 - 15:14

Задача №11 ("строка из букв строки", работа со строками)

$word1 = "encountered";
$word2 = "count";

$num = strlen($word2);
for($i=0;$i<$num;$i++){
$str = substr($word2,$i,1);
if(($pos = strpos($word1,$str)) != FALSE){
$full .= $str;
$word1 = substr($word1,0,$pos).substr($word1,$pos+1);
}
else{
$full = "Невозможно составить слово";
}
}
if(strcmp($full,$word2) == 0){
echo "Слово составлено Поздравляем Это слово - ";
echo $full;
}


Может есть замечания, интересно будет послушать ;)
  • 0

#39 Aleks-prog

Aleks-prog
  • Пользователь
  • 7 сообщений
  • Репутация: 0

Отправлено 16 Ноябрь 2011 - 14:18

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


<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Главная</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="cycle.js"></script>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>

<body bgcolor="#FFFFFF">

<?php
class books{
private $string;
private $arr;

public function __construct($str){
$this->string = $str;
echo "Переменная \$string равна ". $this->string."<br \>";
}
public function FileToArray($file){
$stringsf = file($file);
foreach($stringsf as $key=>$value){
$tmp = explode("|",$value);
$this->arr[$key]["name"] = $tmp[0];
$this->arr[$key]["author"] = $tmp[1];
$this->arr[$key]["izdat"] = $tmp[2];
$sostoyanie = ($tmp[3] == 1) ? $sostoyanie = "Опубликована" : "Не опубликована";
$this->arr[$key]["sost"] = $sostoyanie."<br>";
}
return $this->arr;
}
public function __destruct(){
$this->string = null;
unset($this->string);
if(isset($this->string)){
echo "Переменная \$string есть";
}
else{
echo "Переменная \$string удалена<br \>";
}
}

}

$a = new books("25");
$itog = $a->FileToArray("books.txt");

?>

<div>
<table border="1" cellpadding="0" cellspacing="0" width="500px">
<tr bgcolor="gray" style="font-weight: bold;">
<td></td>
<td>Книга</td>
<td>Автор</td>
<td>Издательство</td>
<td>Состояние</td>
</tr>
<?php
foreach($itog as $k=>$v){
printf("
<tr bgcolor='silver'>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
</tr>",$k+1,$v['name'],$v['author'],$v['izdat'],$v['sost']);
}
?>
</table>
</div>
</body>
</html>

  • 0

#40 Dirokol

Dirokol
  • Пользователь
  • 2 сообщений
  • Репутация: 0

Отправлено 08 Декабрь 2011 - 09:28

Посмотрите пожалуйста на моё решение задачи №7
пока не придумал, как быть с системами >10
я понимаю, что это быдлокод.. и принимаю любую конструктивную критику

Условие задачи.
Осуществить задачу перевода числа из одной системы счисления в другую. Есть пользовательская форма с тремя полями(число, из какой СС, в какую СС), Пользователь заполняет все поля и отправляет данные на сервер.

<form action="7.php" method="POST">
Enter number:<br>
<input type="text" name="num" size=""><br>
Old system:<br>
<input type="text" name="ss" size=""><br>
New system:<br>
<input type="text" name="ns" size=""><br>
<input type="submit" name="Enter" value="pods4itat">
</form>

<?php

if (isset($_POST['num']) && isset($_POST['ss']) && isset($_POST['ns']))
{
$num = $_POST['num'];
$ss = $_POST['ss'];
$ns = $_POST['ns'];
}
$length = strlen($num);

// из любого в десятичную сс
echo "Из заданой системы счисления - в десятичную:";
echo "<br>";
for ($i=1; $i<=$length; $i++)
{
if ($i<$length)
{
echo substr($num, $i-1, 1)." * ";
echo pow($ss, $length-$i)." + ";
}
else
{
echo substr($num, $i-1, 1)." * ";
echo pow($ss, $length-$i);
}
$a += substr($num, $i-1, 1)*pow($ss, $length-$i);
}
echo " = ".$a;
echo "<br>";

//из десятичной в любую
echo "Из десятичной системы счисления - в требуемую";
echo "<br>";
$ostatok=$a;
do
{
echo $ostatok."=";
$rem = $ostatok%$ns;
echo $rem."+";
$Chislo[] = $rem;
$ostatok = (integer)($ostatok/$ns);
echo "$ostatok"."*"."$ns";
echo "<br>";
}
while ($ostatok>=$ns);

echo $ostatok;
echo "<br>";
$Chislo[] = $ostatok;

$Chislo = array_reverse($Chislo);
$chislo = implode("", $Chislo);

echo "Результат: ".$chislo;

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru