Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как сделать калькулятор и тем самым начать изучение языка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужны советы и может быть основы кода и вообще php
fabervox
Отправлено: 10 Июля, 2012 - 21:26:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Здравствуйте!

Мне как и многим, в принципе далеким от этого, людям приходится сталкиваться с этим языком.Самые мало существенные проблемы отнимают много времени,а более приходится обходить.Поэтому я решил что пора начать изучение этого языка.

И я решил что для получения фундаментального понимания, мне нужно сделать калькулятор.
Конечно было бы правильнее изучить несколько учебников и затем только начинать.
Но увы без понимания совсем ничего не запоминается,а примеры что попадались в учебниках какие то чрезмерно сложные или наоборот простые,но бессмысленные, или являются какими то хаками для CMS. Поэтому понимание приходит очень медленно.

В общем для начала я хочу сделать калькулятор следующего вида:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2.     <head>
  3.      <title>калькулятор</title>
  4.     </head>
  5.  
  6.     <body>
  7.      <br>первое число <input type="integer" name="first count" value="">
  8.      <br>второе число <input type="integer" name="second count" value="">
  9.      <input type="submit" name="submit" value="Submit">
  10.     </body>
  11. </html>

вот тут наглядней - http://fabervox[dot]ya[dot]ru/replies[dot]xml?item_no=2

Но это HTML статичный.
Я же хочу сделать на PHP работающий калькулятор.Т.е. вводишь числа,нажимаешь submit и получаешь результат сложения.

Я не говорю что на этом я хорошо пойму PHP, но если пойму это, смогу далее сделать полноценный калькулятор и начать изучать учебники.

Пока у меня получилось что то далекое от кода вообще:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. echo "<html>";
  4.  
  5.   echo "<head>";
  6.  
  7.     echo "<title>Калькулятор</title>";
  8.  
  9.   echo "</head>";
  10.  
  11.   echo "<body>";
  12.  
  13.     echo "<h1>Калькулятор</h1>";
  14.  
  15.     echo "<form>";
  16.  
  17.     echo "<br>first count <input type="integer" name="first count" value="">";
  18.  
  19.     echo "</form>";
  20.  
  21.     echo "<br>second count <input type="integer" name="second count" value="">";
  22.    
  23.     echo "<input type="submit" name="submit" value="Submit">";
  24.  
  25.     echo $result = $first count+$second count
  26.  
  27.     if ($name == "Submit") { echo "$result"; }
  28.  
  29.   echo "</body>";
  30.  
  31. echo "</html>";
  32. ?>


Я думаю вы уже заметили что здесь полное отсутствия понимания.Может я не туда написал,потому что хотелось больше чем просто получить готовый код,но более подходящей ветки я как то не нашел.
 
 Top
Viper
Отправлено: 10 Июля, 2012 - 22:02:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




fabervox
1. name="second count" неправильно. имя элементов форм не должно содержать пробелов.
2. не нужно делать для каждой строки echo
пример
PHP:
скопировать код в буфер обмена
  1. echo 'blablaновая строка
  2. новый текст
  3. blabla';


3. типы полей integer и т.п. поддерживаются не всеми браузерами. Если пишете под html5 то используйте, иначе заменяйте на text
4. у submit необязательно указывать name.
5. php код сами напишете или?

(Отредактировано автором: 10 Июля, 2012 - 22:03:08)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
fabervox
Отправлено: 17 Июля, 2012 - 10:26:54
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Viper
Продолжим по порядку.
1.2.3.Все понятно.
4.Попробовал убрать название и использовать тип в виде переменной, увы так не работает почему-то.
5.Код написал с небольшим сторонним пинком друга.
Код (Отобразить)
Здесь скрипт в рабочем виде


6.Теперь относительно того что нужно, т.е. будет, дальше:
    а) разобраться как убрать имя переменной.
    б) ограничить ввод только цифр.
    в) сделать обнуление чтобы можно было обновить страницу.
    г) добавить действия и их выбор.


В общем делать я буду сам, но мне важны поправки и критика.
 
 Top
DelphinPRO
Отправлено: 17 Июля, 2012 - 12:07:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Viper пишет:
типы полей integer и т.п. поддерживаются не всеми браузерами

такого типа вообще нет. ) есть number


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Viper
Отправлено: 17 Июля, 2012 - 12:15:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




fabervox пишет:
Попробовал убрать название и использовать тип в виде переменной, увы так не работает почему-то
я ж думал у вас форма и скрипт php разделены. Имя у сабмита можно убрать. вы можете добавить скрытое поле и проверять его значение. Т.е. к примеру

CODE (htmlphp):
скопировать код в буфер обмена
  1. <input type="hidden" name="checking" value="1" />
  2.  
  3. if (!empty($_POST['checking'])) {
  4. // From processing


DelphinPRO пишет:
такого типа вообще нет. ) есть number
тем более Улыбка Я просто не признаю ещё эти новые типы Улыбка

(Отредактировано автором: 17 Июля, 2012 - 12:16:31)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DelphinPRO
Отправлено: 17 Июля, 2012 - 12:37:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Viper пишет:
Я просто не признаю ещё эти новые типы

зря

эти типы важны, как минимум, для мобильных устройств. Например для поля type="tel" вызывается экранная клавиатура только с цифрами, что несколько улучшает юзабельность сайта


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Viper
Отправлено: 17 Июля, 2012 - 13:29:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




DelphinPRO пока не доводилось ещё работать с моб. устройствами. В нашем "селе" толком даже проверить нет возможности.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
fabervox
Отправлено: 18 Июля, 2012 - 13:43:26
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Калькулятор потихоньку развивается,в обратном порядке по списку.
Сделал действия.Но увы не селектором каким нибудь,а пока только разными кнопками.
Не понимаю что нужно чтобы сделать знак действия переменной или как его менять.

Поэтому пока имеет вот такой вид.
Код (Отобразить)
Находится там же где и раньшессылка


Кто знает, подскажите варианты более простого кода и/или с использованием селектора знака.
 
 Top
DelphinPRO
Отправлено: 18 Июля, 2012 - 14:14:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




fabervox пишет:
Кто знает, подскажите варианты более простого кода и/или с использованием селектора знака.

добавьте еще один инпут между цифрами для ввода знака действия.
в скрипте проверяйте какой знак пришел, элементарно пока. Пока вы не решите научить свой калькулятор вычислять сложные выражения вида 2+2*2-6/7 Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
fabervox
Отправлено: 27 Июля, 2012 - 15:13:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Да вы правы
DelphinPRO пишет:
...элементарно пока. Пока вы не решите научить свой калькулятор вычислять сложные выражения вида 2+2*2-6/7

Ну вот решил и запнулся на наверно довольно простом, только совсем не понимаю что не так.
Но давайте по порядку.

Что я задумал: (Отобразить)


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


Зачем это нужно: (Отобразить)


В общем нужно это скорей мне одному. И не для этих высоких целей, а просто для обучения php.

Хотя в последнее время я стал зацикливаться, и сомневаюсь что разработка этого калькулятора развивает мои навыки php.

А теперь к конкретной проблеме.
Мне нужно сделать цикл, который в итоге повторял бы функцию "вычленения" до тех пор, пока её результат не станет нулевым.
Проблема заключается в том что мне никак не удается правильно создать цикл, то вообще не работает, то уходит в бесконечность.
вот так вот получилось, но не работает (Отобразить)И как это сделать правильно я не понимаю


Тут мне уже наверно лучше подойдет пример кода, потому что я уже как этот цикл, делаю одно и то же часами, и уже можно считать днями.


Я понял в чем была ошибка. Я считал что while действует до тех пор пока условие не выполнится. Прочитав описание цикла на официальном сайте мне дошло что все наоборот))
PS: Удивительно, каждый раз когда пишу сюда или собираюсь написать, решение приходит само, и ответы уже сразу после их появления кажутся очевидными.

(Отредактировано автором: 27 Июля, 2012 - 15:44:16)

 
 Top
tuareg
Отправлено: 27 Июля, 2012 - 15:59:38
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Есть такая штука называется "обратная польская нотация" она как раз для таких вещей. типа 2+2*2-6/7
P.S с грушами и яблоками там будет посложнее Радость
 
 Top
DelphinPRO
Отправлено: 27 Июля, 2012 - 16:26:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




fabervox пишет:
Ну вот решил и запнулся на наверно довольно простом,
fabervox пишет:
Калькулятор будет вычленять каждое число и знаки по своему порядку

Сначала лексический анализ выражения - преобразование его в поток лексем.
Потом синтаксический разбор и вычисление результата.

Тема сложная..


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
fabervox
Отправлено: 14 Сентября, 2012 - 16:51:03
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Что то немогу разобраться с регулярными выражениями.
Нужно чтобы из строки в массив собиралось все что находится между символами.
Почитал уроки,мало что понял.
Составил pattern '/^[mdas][1234567890]+[mdas]$/'.
Как я понимаю должен действовать следующим образом:искать упоминание одного из в первых скобках,затем пропуская символы из вторых скобок,найти следующее упоминание из третьих скобок.

Раньше я думал сделать подобное без использования регулярных выражений.Впринципе кое что получалось с помощью strpbrk().Но получалось не очень удобно,некрасиво и просто много лишнего было в коде.Конечно если бы функция strpbrk() могла бы и справа налево читать строку было б лучше,но увы.
Да и просто хочется разобраться с регулярными выражениями.
 
 Top
DelphinPRO
Отправлено: 14 Сентября, 2012 - 17:23:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




этот паттерн вернет подходит под выражения в которых первым символом идет один из "mdas", затем сразу одна или более цифр и заканчивается одним из символов "mdas"

[1234567890] это можно заменить на короткий вариант \d


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB