Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обнаружить ошибку??? 
:(
    Опции темы
korob2001
Дата 13.5.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Привет!!!
Нужно написать не сложный калькулятор, в JavaScript я не очень волоку. Когда-то писал его на VB6, вот решил перевести его на JavaScript smile, теперь постоянно получаю ошибку:
Предпологается наличие ")"
Как я понял не хватает закрывающей скобки, но хоть убейте, не могу найти, где её не хватает. smile
Вот код:
Код

 <script language="JavaScript" type="text/javascript" defer>
   <!--//
       var operNum;
       var numFirst;
       var numSecond;
       var numResult;
       var isClar;
       
       function calcClear( idDisp == true ) {
            var fil   = document.getElementById( idDisp );
            fil.value = 0;
            isClar    = false;
            operNum   = -1;
            numFirst  = undefined;
            numSecond = undefined;
            numResult = undefined;
       }

       function calcNumClick( num, idDesp ) {
            var fil = document.getElementById( idDesp );
            if ( isClar == false ) {
                  isClar = true;
                  fil.value = 0;
            }

            if ( operNum == 0 ) {
                 isClar = true;
                 fil.value = 0;
                 numFirst = undefined;
                 operNum = -1;
            }

            if ( fil.value != 0 ) {
                 fil.value += num;
            } else {
                 fil.value = num;
            }
       }

       function calcOperationClick( operator, idDesp ) {
            var fil = document.getElementById( idDesp );
            if ( isClar == true ) {
                 if ( numFirst == undefined ) {
                      numFirst = fil.value;
                      operNum  = operator;
                      isClar   = false;
                 } else {
                      numSecond = fil.value;
                      switch ( operNum ) {
                           case '1':
                                 numResult = numFirst + numSecond;
                                 break;
                           case '2':
                                 numResult = numFirst - numSecond;
                                 break;
                           case '3':
                                 numResult = numFirst * numSecond;
                                 break;
                           case '4': 
                                 if ( numSecond != 0 ) {
                                      numResult = numFirst / numSecond;
                                 } else {
                                      window.alert("Деление на 0 нельзя осуществить");
                                      numResult = 0;
                                 }
                                 break;
                      }
                      fil.value = numResult;
                      numFirst  = numResult;
                      // Очищаем ненужные данные
                      numSecond = undefined;
                      numResult = undefined;
                      isClar    = false;
                      operNum   = operator;
                 }
             } else {
                 if ( operNum == 0 ) {
                      if ( operator > 0 ) {
                           operNum = operator;
                           isClar  = false;
                      } else {
                           window.alert("Получен не верный индекс");
                      }
                 } else {
                      window.alert("Получен два раза один и тот же индекс");
                 }
            }
       } 
   //-->
 </script>

Уже думал повесить ActiveX - калькулятор, но не устраиват то, что он будет работать только под Win. smile
Заранее спасибо за помощь.

Это сообщение отредактировал(а) korob2001 - 13.5.2005, 17:07


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Aliance
Дата 13.5.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Хм, так сразу не увидел ошибки (искал только скобку...)
Поищу тщательнее.

Зато есть пара советов:

Цитата(korob2001 @ 13.5.2005, 18:00)
            if ( isClar == false ) {

заменяй просто на if (!isClar)

Цитата(korob2001 @ 13.5.2005, 18:00)
          if ( isClar == true ) {

if (isClar)

Цитата(korob2001 @ 13.5.2005, 18:00)
operator

Это кажется зарезервированное слово, лучше замени его название на любое другое :-)
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 13.5.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Блин опять я лоханулся smile , обрати внимание на эту функцию:
Код

function calcClear( idDisp == true ) {
            var fil   = document.getElementById( idDisp );
            fil.value = 0;
            isClar    = false;
            operNum   = -1;
            numFirst  = undefined;
            numSecond = undefined;
            numResult = undefined;
}

smile Особенно на то, что находится в скобках, где якобы функция должна получать параметры. smile

Просто я переводил программу, которую ранее писал на VB6.0, а там оператор сравнения "=" и присваивания "=" выглядят одинаково. Вот и запутался немного. Всю ночь искал скобку. smile

ЗЫ: за советы спасибо, а 0 это в JavaScript не является ложью??? Просто я боялся запутать программу, в Perl нет True или False, там False - это 0 или "0" или "" undef, всё остальное True.

Это сообщение отредактировал(а) korob2001 - 13.5.2005, 17:57


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Sardar
Дата 13.5.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



korob2001 также и в JS. Но в JS нет дефолтовых значений у параметров функций.

Скинь весь код smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
korob2001
Дата 13.5.2005, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Sardar - постараюсь сегодня его доделать и обязательно выложу исходник вместе с HTML и CSS. Хочу сейчас ещё сделать что бы при нажатии кнопки ON у него плавно загорался дисплей, а при нажатии кнопки OFF так же, плавно погасал. smile
Думаю сегодня закончу и можно будет потестировать, так как тестировать одному человеку калькулятор, дело утомительное.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 14.5.2005, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



smile Какой ужас, я там уже такой воды намутил, даже выкладывать стыдно.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Sardar
Дата 14.5.2005, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



korob2001 выкладывай, вместе отфильтруем и выбелим до совершенства smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
korob2001
Дата 14.5.2005, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



smile Ну ладно, только он помоему у меня слишком объёмный получился:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <style type="text/css">
     .display { 
            background-color: #CCCCCC;
            color: #000000;
            font-size: 18px;
            font-weight: bold;
            font-family: Coupier New;
     }
     .buttons {
            background-color: #cccccc;
            color: #000000;
            font-size: 13px;
            font-weight: bold;
            font-family: Courier New;
            width: 30px;
            height: 30;
            cursor: hand;
     }
     .hbuttons {
            background-color: #cccccc;
            color:       #000000;
            font-size:   13px;
            font-weight: bold;
            font-family: Courier New;
            height:      70px;
            width:       30px;
            cursor: hand;
     }
     .wbuttons {
            background-color: #CCCCCC;
            color:       #000000;
            font-size:   13px;
            font-weight: bold;
            font-family: Courier New;
            height:      30px;
            width:       80px;
            cursor: hand;
     }
     
     .onbuttons {
            background-color: #CCCCCC;
            color:       #000000;
            font-size:   13px;
            font-weight: bold;
            font-family: Courier New;
            height:      30px;
            width:       80px;
            cursor: hand;
     }
   </style>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 <script language="JavaScript" type="text/javascript" defer>
   <!--//
       var operNum;
       var numFirst;
       var numSecond;
       var numResult;
       var isClar;
       var calcOn;
       var colorDisplay = new Array("#CCCCFF", "#AAAAFF", "#9999FF", "#8888FF", "#7777FF", "#6666FF", "#6666CC", "#666699", "#CCCCCC");
       var colorButtons = new Array("#FFCC99", "#FFAAAA", "#FF9999", "#FF8888", "#FF7777", "#FF6666", "#CC6666", "#996666", "#CCCCCC");
       var colorActiv = 0;
       var copyDispId;
       var copyButtId;
       var meCopy;
       
       function calcClear( idDisp ) {
            var fil   = document.getElementById( idDisp );
            fil.value = 0;
            isClar    = false;
            operNum   = -1;
            numFirst  = undefined;
            numSecond = undefined;
            numResult = undefined;
       }

       function calcNumClick( num, idDesp ) {
            var fil = document.getElementById( idDesp );
            if ( !isClar ) {
                  isClar = true;
                  fil.value = 0;
            }

            if ( operNum == 0 ) {
                 isClar = true;
                 fil.value = 0;
                 numFirst = undefined;
                 operNum = -1;
            }

            if ( fil.value != 0 ) {
                 fil.value += num;
            } else {
                 fil.value = num;
            }
       }

       function calcOperationClick( opsss, idDesp ) {
            var fil = document.getElementById( idDesp );
            if ( isClar ) {
                 if ( numFirst == undefined ) {
                      numFirst = fil.value;
                      operNum  = opsss;
                      isClar   = false;
                 } else {
                      numSecond = fil.value;
                      switch ( operNum ) {
                           case '1':
                                 if ( opsss == '6' ) {
                                      numResult = parseFloat( numFirst ) +  calcProc( numFirst, numSecond );
                                 } else {
                                      numResult = parseFloat( numFirst ) + parseFloat( numSecond );
                                 }
                                 break;
                           case '2':
                                 if ( opsss == '6' ) {
                                      numResult = parseFloat( numFirst ) -  calcProc( numFirst, numSecond );
                                 } else {
                                      numResult = parseFloat( numFirst ) - parseFloat( numSecond );
                                 }
                                 break;
                           case '3':
                                 if ( opsss == '6' ) {
                                      numResult = parseFloat( numFirst ) *  calcProc( numFirst, numSecond );
                                 } else {
                                      numResult = parseFloat( numFirst ) * parseFloat( numSecond );
                                 }
                                 break;
                           case '4':
                                 if ( opsss == '6' ) {
                                      if ( calcProc( numFirst, numSecond ) != 0 ) {
                                           numResult = parseFloat( numFirst ) +  calcProc( numFirst, numSecond );
                                      } else {
                                           window.alert("Не могу делить на ноль");
                                           numResult = 0;
                                      }
                                 } else {
                                      if ( numSecond != 0 ) {
                                           numResult = parseFloat( numFirst ) + parseFloat( numSecond );
                                      } else {
                                           window.alert("Не могу делить на ноль");
                                           numResult = 0;
                                      }
                                 }
                                 break;
                            case '6':
                                 if ( opsss == '6' ) {
                                      numResult = parseFloat( numFirst ) %  calcProc( numFirst, numSecond );
                                 } else {
                                      numResult = parseFloat( numFirst ) % parseFloat( numSecond );
                                 }
                                 break;
                      }
                      
                      fil.value = numResult;
                      numFirst  = numResult;
                      // Очищаем ненужные данные
                      numSecond = undefined;
                      numResult = undefined;
                      isClar    = false;
                      if ( opsss != '5' ) {
                           numResult = undefined;
                           operNum   = opsss;
                      }
                 }
             } else {
                 if ( operNum != '5' ) {
                      if ( opsss > 0 ) {
                           operNum = opsss;
                           isClar  = false;
                      } else {
                           window.alert("Получен не верный индекс");
                      }
                 } else {
                      window.alert("Получен два раза один и тот же индекс");
                 }
            }
       } 
       
       function calcProc( num1, num2 ) {
                return ( ( parseFloat( num1 ) / 100 ) * parseFloat( num2 ) );
       }
       
       function calcDig( idDisp ) {
                 var display = document.getElementById( idDisp );
                 display.value = parseFloat( display.value ) * -1;
       }
       
       // Выключение калькулятора
       function calcPressOFF( idButt, idDisp ) {
                copyDispId = idDisp;
                copyButtId = idButt;
                var disp = document.getElementById( idDisp );
                var butt = document.getElementById( idButt );
                
                     
                     disp.style.backgroundColor = colorDisplay[ colorActiv ];
                     butt.style.backgroundColor = colorButtons[ colorActiv ];
                if ( meCopy == 'OFF' ) {
                     disp.value = "";
                     colorActiv++;
                     if ( colorActiv < colorDisplay.length ) {
                          setTimeout("calcPressOFF( copyButtId, copyDispId )", 50);
                     } else {
                          meCopy = "ON";
                     }
                } else {
                     disp.value = "0";
                     colorActiv--;
                     if ( colorActiv > 0 ) {
                          setTimeout("calcPressOFF( copyButtId, copyDispId )", 50);
                     } else {
                          meCopy = "OFF";
                     }
                } 
        }
        
        function calcInitOFF( idMe, idForm ) {
                 var form = document.getElementById( idForm );
                 if ( idMe.value == "OFF" ) {
                      for ( var c=0; c<form.elements.length; c++ ) {
                            form.elements[c].disabled = true;
                      }
                      idMe.value = "ON";
                      meCopy = "OFF";
                      colorActiv = 0;
                 } else {
                      for ( var c=0; c<form.elements.length; c++ ) {
                            form.elements[c].disabled = false;
                      }
                      idMe.value = "OFF";
                      myCopy = "ON";
                      colorActiv = colorDisplay.length;
                 }
                 idMe.disabled = false;
        }
   //-->
 </script>
</head>

<body>
<form id="calc">
   <table width="200" border="0" bordercolor="black" cellspacing="0" cellpadding="3" bgcolor="#cccccc">
    <tr>
     <td width="100%" colspan="5" align="center">
       <b>Калькулятор</b>
     </td>
    </tr>
    <tr>
     <td width="100%" colspan="5" align="center">
       <input type="text" size="20" id="display" class="display" maxlength="20" disabled="true" readonly="true">
     </td>
    </tr>
    <tr>
     <td width="20%" align="center" valign="center" colspan="2">
       <input type="button" value="C" id="ce" class="onbuttons" onClick="calcClear('display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="CE" id="ce" class="buttons" onClick="calcClear('display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="+/-" id="n7" class="buttons" onClick="calcDig('display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="ON" id="n8" class="buttons" onClick="calcInitOFF( this, 'calc');calcPressOFF('ce','display')">
     </td>
    </tr>
    <tr>
     <td width="20%" align="center" valign="center">
       <input type="button" value="7" id="n7" class="buttons" onClick="calcNumClick('7','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="8" id="n8" class="buttons" onClick="calcNumClick('8','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="9" id="n9" class="buttons" onClick="calcNumClick('9','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="*" id="f1" class="buttons" onClick="calcOperationClick('3','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="%" id="f2" class="buttons" onClick="calcOperationClick('6','display')" disabled="true">
     </td>
    </tr>
    <tr>
     <td width="20%" align="center" valign="center">
       <input type="button" value="4" id="n4" class="buttons" onClick="calcNumClick('4','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="5" id="n5" class="buttons" onClick="calcNumClick('5','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="6" id="n6" class="buttons" onClick="calcNumClick('6','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="-" id="f3" class="buttons" onClick="calcOperationClick('2','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="/" id="f4" class="buttons" onClick="calcOperationClick('4','display')" disabled="true">
     </td>
    </tr>
    <tr>
     <td width="20%" align="center" valign="center">
       <input type="button" value="1" id="n1" class="buttons" onClick="calcNumClick('1','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="2" id="n2" class="buttons" onClick="calcNumClick('2','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="3" id="n3" class="buttons" onClick="calcNumClick('3','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center" rowspan="2">
       <input type="button" value="+" id="f5" class="hbuttons" onClick="calcOperationClick('1','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center" rowspan="2">
       <input type="button" value="=" id="f6" class="hbuttons" onClick="calcOperationClick('5','display')" disabled="true">
     </td>
    </tr>
    <tr>
     <td width="20%" align="center" valign="center" colspan="2">
       <input type="button" value="0" id="n0" class="wbuttons" onClick="calcNumClick('0','display')" disabled="true">
     </td>
     <td width="20%" align="center" valign="center">
       <input type="button" value="." id="f7" class="buttons" onClick="calcNumClick('.','display')" disabled="true">
     </td>
     
    </tr>
   </table>
  </form>
</body>
</html>

smile

Это сообщение отредактировал(а) korob2001 - 14.5.2005, 02:19


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Sardar
Дата 14.5.2005, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Собстна кнопка "разделить" прикольно работает smile
Почему выражения не парсим, а просто кнопки? Ну и естественно где функции, где графики? smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
korob2001
Дата 14.5.2005, 04:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Цитата

Собстна кнопка "разделить" прикольно работает

Опсс smile , просто уже голова кругом идёт. Меняем следующую часть:
Код

case '4':
    if ( opsss == '6' ) {
     if ( calcProc( numFirst, numSecond ) != 0 ) {
                numResult = parseFloat( numFirst ) /  calcProc( numFirst, numSecond );
     } else {
        window.alert("Не могу делить на ноль");
            numResult = 0;
     }
    } else {
     if ( numSecond != 0 ) {
        numResult = parseFloat( numFirst ) / parseFloat( numSecond );
     } else {
        window.alert("Не могу делить на ноль");
        numResult = 0;
     }
    }
break;

Цитата

Почему выражения не парсим, а просто кнопки?

Не понял???? smile
Цитата

Ну и естественно где функции, где графики?

Эх, хоть бы с обычными разобраться. Это у меня самая большая программа на JavaScript. smile

Мне вот что-то не очень нравится, как работает кнопка равно. Что-то в ней не так. Допустим я набрал "2 + 2 =", получил "4", теперь жму на кнопу "равно ещё раз, по идее должен получить "6", при следующем клике "8" и т.д. А у меня сначала несколько кликов ничего не происходит, а затем выводится окно alert("Получен два раза один и тот же индекс") .
Niet goed smile . Сегодня целый день ушёл на то, что бы избавиться от такой работы кнопки "=", но нифига пока так и не вышло.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0943 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.