Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 03.12.2008, 19:39   #1
Заблокирован
 Старший сержант
Аватар для shagart
 
shagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слухуshagart у всех на слуху
Регистрация: 16.07.2008
Сообщений: 209
Популярность: 1335
Сказал(а) спасибо: 231
Поблагодарили 236 раз(а) в 134 сообщениях
Отправить сообщение для shagart с помощью ICQ Отправить сообщение для shagart с помощью Telegram Отправить сообщение для shagart с помощью Yahoo Отправить сообщение для shagart с помощью Skype™
 
По умолчанию Калькулятор в 20 строк

Код:
#include <stdio.h> // Калькулятор v21a - 20 строк! (C) 2006, shagart
float err=0, vars[27], q, r; char s1[1024]=" ", *st=s1+1, *x, *y, g,
f=1;
float main(char *s, int i1, int i2, int u)
{ char c=0, op[]=",=+-*/", *p, *t, d; int br=0, i;
  if (f) goto l1; else if (i1>i2) { err=err?1:!u; return 0; }
  for (p=op; *p; p++)
    for (i=(*p=='='?i1:i2); d=s[i],(*p=='='?i<=i2:i>=i1);
(*p=='='?i++:i--))
      if(!br&&d==*p){c=*p;goto l;} else
if(d=='('||d==')')br+=(d=='('?1:-1);
l:if (c==',') { main(s, i1, i-1, 0); return main(s, i+1, i2, 0); }
  if(d=s[i1]&223,c=='=')return
i1==i-1&&d>64&&d<91?vars[d-65]=main(s,i+1,i2,0):(err=1,0);
  if((s[i-1]&223)!='E'&&(c=='+'||c=='-'))return
main(s,i1,i-1,1)+(44-c)*main(s,i+1,i2,0);
  if (c=='/') {q=main(s, i+1, i2, 0); return q?main(s, i1, i-1,
0)/q:(err=1);}
  if (c=='*') return main(s, i1, i-1, 0)*main(s, i+1, i2, 0);
  if(s[i1]=='(') return s[i2]==')'?main(s, i1+1, i2-1, 0):(err=1,0);
  if (i1==i2 && (s[i1]&223)>64 && (s[i1]&223)<91) return
vars[(s[i1]&223)-65];
        return (sscanf(s+i1,"%g%n",&r,&i) && i==i2-i1+1)?r:(err=1, 0);
  l1:for(f=0,gets(st),x=st,y=st; err=0,g=*x,(x>st?*(x-1):*st); x++)
      if(g!=''||*(y-1)>47&&*(y-1)<58&&*(x+1)>47&&*(x+1)<58)*(y++)=(g?*x:0);
  if (printf((err?"Error!\n\n":"%g\n\n"), main(st, 0, y-st-2, 0))) goto l1;
}
// Поддерживаются стандартные арифметические операции над данными типа float,
// однобуквенные переменные, оператор присваивания (в т.ч. "сквозной", например
// x=y=z=1), а также оператор "запятая". При записи чисел с плавающей точкой
// возможно использование формата [+-]dddE[+-]ddd, например, 2e-2. Реализован
// контроль синтаксических ошибок и деления на ноль.
// Работоспособность проверялась на Borland C 3.1. Для того, чтобы программа
// скомпилировалась, необходимо запретить использование синтаксиса C++, а чтобы
// правильно работала, необходимо использовать соглашения р вызовах языка C 
// (не Pascal !). Кстати, эти требования соответствуют установкам BC 3.1 по 
// умолчанию.
//       shagart,
//          12 ноября 2006 г.
// PS Сорри за утерю читабельности - зато 20 строк.
Удачи))
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Ivan_32 (03.12.2008), Zhyk (04.12.2008)
Ответ

Метки
калькулятор, строк)


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Info] Калькулятор стат/скилл поинтов ApOsToL Rohan Online 1 06.11.2009 18:28
[Файл] [source]Калькулятор(тренируемся) shagart С/С++ 0 03.12.2008 19:34
Хочу написать калькулятор шансов заточки - нужны данные JEY72 Архив уязвимостей 8 06.06.2008 07:15

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:11.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net