Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Калькулятор 
:(
    Опции темы
DenisKID
Дата 9.9.2012, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.9.2012

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



Всем привет) Начну с того что я не программист...
Но вот решил просто освоить для себя. Выбрал язык Си. Купил книгу начал
читать. Написал первую более менее законченную программу)))

Калькулятор. v 0.2

Код

#include <windows.h>
#include <conio.h>
#include <stdio.h>
 
int main()
{
 
   textbackground(1);
  textcolor(14);
 
  printf("**************************\n");
  printf("     ELECTRONICS  CO      \n");
  printf("**************************\n");
  printf("   ‚ᥠЇа*ў* §*йЁйҐ**л    \n   „«л Їа®¤®«¦Ґ*ЁҐ        \n   *¦¬ЁвҐ Enter           \n");
  printf("**************************\n");
 
  Beep(294, 1000/8);
  Beep(440, 1000/4);
  Beep(262*2, 1000/4);
  Beep(330*2, 1000/4);
  Beep(415, 1000/8);
  Beep(440, 1000);
 
  getch();
 
  float g;
  int a, b, c, d, e, f, h, i;
  i = 1;
  g = b;
 
  printf ("    ЉЂ‹њЉ“‹џ’Ћђ  v 0.2    \n");
  printf("**************************\n");
 
  textbackground(0);
  textcolor(14);
 
  printf ("„«п б«®¦Ґ*Ёп   **¦¬ЁвҐ   1\n");
  printf ("„«п ўлзЁв**Ёп  **¦¬ЁвҐ   2\n");
  printf ("„«п г¬*®¦Ґ*Ёп  **¦¬ЁвҐ   3\n");
  printf ("„«п ¤Ґ«Ґ*Ёп    **¦¬ЁвҐ   4\n");
  printf ("„«п ў®§ўҐ¤Ґ*ЁҐ ў б⥯Ґ*м 5\n");
 
  scanf ("%d", &a );
 
  while ( a != 1 & a != 2 & a != 3 & a != 4 & a != 5)
  {
     printf ("„«п б«®¦Ґ*Ёп   **¦¬ЁвҐ   1\n");
     printf ("„«п ўлзЁв**Ёп  **¦¬ЁвҐ   2\n");
     printf ("„«п г¬*®¦Ґ*Ёп  **¦¬ЁвҐ   3\n");
     printf ("„«п ¤Ґ«Ґ*Ёп    **¦¬ЁвҐ   4\n");
     printf ("„«п ў®§ўҐ¤Ґ*ЁҐ ў б⥯Ґ*м 5\n");
     scanf ("%d", &a );
  }
 
  if( a == 1 | a == 2 | a == 3 | a == 4)
  {
     printf ("    ‚ўҐ¤ЁвҐ зЁб«*\n");
     scanf ("%d", &b );
     scanf ("%d", &c );
  }
 
  if( a == 5 )
  {
     printf ("‚ўҐ¤ЁвҐ зЁб«®\n");
     scanf ("%d", &b );
     printf ("‚ўҐ¤ЁвҐ б⥯Ґ*м\n");
     scanf ("%d", &c );
  }
 
  h = b;
 
  d = b + c;
  e = b - c;
  f = b * c;
  g = (float)b / c;
 
  while ( i < c )
  {
        i = i + 1;
        h = h * b;
  }
 
  printf ("**************************\n");
 
  if ( a == 1 )
  printf ("ђҐ§г«мв*в : %d", d);
  if ( a == 2 )
  printf ("ђҐ§г«мв*в : %d", e);
  if ( a == 3 )
  printf ("ђҐ§г«мв*в : %d", f);
  if ( a == 4 )
  printf ("ђҐ§г«мв*в : %2f", g);
  if ( a == 5 )
  printf ("ђҐ§г«мв*в : %d\n", h);
 
  getch();
 
  return 0;
}


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

Код компилировал lccwin32.

Вот сама программа в архиве ссылке http://www.cyberforum.ru/cpp-beginners/thr...0914-page4.html

Да и ещё вопрос. Как можно оптимизировать код? 
PM MAIL   Вверх
bsa
Дата 9.9.2012, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



1. ты путаешь логические операции и побитовые: пишешь & вместо && и | вместо ||
2. твои условия слишком сложны (в плане количества букв):  a == 1 | a == 2 | a == 3 | a == 4 следует писать так: (a >=1) && (a <= 4)
3. Твоя программа вообще не пытается повторить ввод операции.

Я бы сделал так:
Код
#include <stdio.h>

float enterNumber(const char *name)
{
   float result;
   do {
      printf("Please enter %s= ", name);
      if (!scanf("%f", &result)) {
          printf("Invalid value. Try again.\n");
          continue;
      }
   } while(0);
   return result;
}

int main()
{
   int choice = 0;
   do {
      static const char operations[] = {'+', '-', '*', '/'};
      float a, b, y;
      printf("My calc\n");
      printf("1. Addition\n2. Subtraction\n3. Multiplication\n4. Division\n\n0. Quit\n\nPlease enter your choice: ");
      if (!scanf("%d", &choice) || (choice < 0) || (choice > 4)) {
         printf("Invalid value. Try again.\n");
         continue;
      }
      if (choice == 0)
         break;
      printf("y = a %c b\n", operations[choice-1]);
      a = enterNumber("a");
      b = enterNumber("b");
      switch(choice) {
      case 1: y = a + b; break;
      case 2: y = a - b; break;
      case 3: y = a * b; break;
      case 4: y = a / b; break;
      }
      printf("y = %hf %c %hf = %hf", a, operations[choice-1], b, y)
   } while(!choose);
   return 0;
}

PM   Вверх
bsa
Дата 10.9.2012, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Для своих вопросов следует создавать отдельные темы

PM   Вверх
DenisKID
Дата 11.9.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.9.2012

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



bsa за совет спасибо... твой код смотрел, но не всё понял. не хватает знаний.

о
но откомпелировать не получилось, выдаёт ошибку(

вот на основе имеющихся знаний преписал калькулятор. применив цикл do/while.

калькулятор

Код

#include<stdio.h>

int main()
{
    int a, b, c, d, e;
    
    do
    {
    do    
    {
    printf("Vibirite operaciu\n");
    printf("+ = 1\n- = 2\n* = 3\n/ = 4\n");
    scanf("%d", &a);
    
    if (a >= 1 && a <= 4)
       break;
    }
    while(1);
    
    printf ("Vvedite chisla\n");
       scanf("%d %d", &b, &c);
    do
    {
    if ( a == 1 )
      { b += c;
       printf("rezul'tat %d\t", b); }
    if ( a == 2 )
      { b -= c;
       printf("rezul'tat %d\t", b); }
    if ( a == 3 )
      { b *= c;
       printf("rezul'tat %d\t", b); }
    if ( a == 4 )
      { b /= c;
       printf("rezul'tat %d\t", b); }
       
    printf ("dlia prodolgeie nagmite 2 dlia exit 1\t");
       scanf ("%d", &d);
    if ( d == 1 )
       break;
    }
    while(1);
    
    printf("\nDlia prodolgenia raboti vvedite  2 , dlia vixoda 1\n");
       scanf("%d", &e);
    if ( e == 1)
       break;
    }
    while(1);
    
    return 0;
}


компилировал на Dev-C++


PM MAIL   Вверх
borisbn
Дата 11.9.2012, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(DenisKID @  11.9.2012,  20:49 Найти цитируемый пост)
компилировал на Dev-C++

ну дайте попридираться))
Dev-C++ - это не компилятор.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 11.9.2012, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
DenisKID, форматировать код кто будет?

DenisKID, тебе компилятор человеческим языком написал, что именно в коде неправильно. Ну неужели нельзя было исправить:
1. использование формата %hf вместо %f для чисел float
2. пропущенная точка с запятой
3. !choose вместо choice
Код
#include <stdio.h>
float enterNumber(const char *name)
{
   float result;
   do {
      printf("Please enter %s= ", name);
      if (!scanf("%f", &result)) {
          printf("Invalid value. Try again.\n");
          continue;
      }
   } while(0);
   return result;
}
int main()
{
   int choice = 0;
   for(;;) {
      static const char operations[] = {'+', '-', '*', '/'};
      float a, b, y;
      printf("My calc\n");
      printf("1. Addition\n2. Subtraction\n3. Multiplication\n4. Division\n\n0. Quit\n\nPlease enter your choice: ");
      if (!scanf("%d", &choice) || (choice < 0) || (choice > 4)) {
         printf("Invalid value. Try again.\n");
         continue;
      }
      if (choice == 0)
         break;
      printf("y = a %c b\n", operations[choice-1]);
      a = enterNumber("a");
      b = enterNumber("b");
      switch(choice) {
      case 1: y = a + b; break;
      case 2: y = a - b; break;
      case 3: y = a * b; break;
      case 4: y = a / b; break;
      }
      printf("y = %f %c %f = %f\n", a, operations[choice-1], b, y);
   }
   return 0;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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