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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразование типов, программа по переводу из чара в инт 
:(
    Опции темы
baduk
Дата 21.11.2013, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В универе задали задачку на си: Выделить все числа, записанные в троичной системе счисления и кратные 3. я примерный алгоритм набросал но я пока очень плохо знаю си, очень надеюсь что если уж саму программу не напишите, так хоть объясните как вот например к типу инт прибавить чар(строка g=g*10 + c) или если нам не подходит слово то перейти к следующему, ниже примерный мой код он естественно неработает, помогите его отладить пожалуйсто


Код
#include <stdio.h>
char c;
int g, m;
g=0;
main() {
while((c=getchar()) != EOF) {
if (c == '0' || c == '1' || c == '2')
g = g*10 + c;
else if (c == ',' || c == ' ' || c == '\n' || c == '\t'){  
m=g%10;
if( m==0)   /*если остаток от деления на 10 равен 0 то троичное число кратно трем*/
printf("%d ", g);
g=0;}
else g=0;
}}


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 21.11.2013, 12:33
PM MAIL   Вверх
bsa
Дата 21.11.2013, 12:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



baduk, во-первых, оформи код. Самому же будет удобней его читать.
во-вторых, перенеси все объявления переменных внутрь main() (после строки 5). А перед main() напиши int: int main() {
в-третьих, char добавляется к int так же, как и int к int. Т.е. твой код g=g*10 + c совершенно корректен с точки зрения компилятора. Но вот с точки зрения логики нет. Так как ascii код символа '0' - это 48, а никак не 0. Поэтому, тебе нужно сделать так: g = g * 10 + (c - '0');
в-четвертых, рекомендую вместо if/else if/else использовать оператор switch - будет значительно более наглядно.
PM   Вверх
baduk
Дата 22.11.2013, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, все сделал, все работает, кроме одного случая, когда я ввожу ноль, 0 же кратен трем, а он его не выводит

Это сообщение отредактировал(а) baduk - 22.11.2013, 16:30
PM MAIL   Вверх
bsa
Дата 23.11.2013, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



baduk, новый код в студию!
PM   Вверх
baduk
  Дата 25.11.2013, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот новый код, 5- получил))


Код
#include <stdio.h>
  int main() {
   char c;
   long long g;
   int m;
   int n;
   int b; 
   int a;
   int q; 
   a=0;
   b=0; 
   g=0;
   q=0;
  printf("inter word:\n");
while((c=getchar()) != EOF) {
switch © {
  case '-' :
b=1;
     break;
case '0' : case '1': case '2' :
a=1;
n=1;
g = g*10 + (c-'0');
break;
case ',': case ' ': case '\t':
m=g%10;
if(m==0 && n==1 && b==1 && a==1 && q==0)
printf("-%lld ", g);
else if(m==0 && n==1 && b==0 && a==1 && q==0)
printf("%lld ", g);
q=0;
a=0;
b=0;
g=0;
   break;
case '\n' :
m=g%10;
if(m==0 && n==1 && b==1 && a==1 && q==0)
printf("-%lld\n", g);
else if(m==0 && n==1 && b==0 && a==1 && q==0)
printf("%lld\n", g);
b=0;
a=0;
n=0;
q=0;
printf("inter next word:\n");
g=0;
  break;
default :
  q=1;
  a=0;
  b=0;
  n=0;
break;
if (c=='\n')
printf("\n inter next word:\n");
  g=0;
  break;
       }
    }
  }



 ! 
bsa
Ты издеваешься? Модератор за тебя что ли кнопку "Код" жать должен?


Это сообщение отредактировал(а) bsa - 26.11.2013, 11:52
PM MAIL   Вверх
bsa
Дата 26.11.2013, 11:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



baduk, будь я твоим учителем, выше тройки ты бы не получил. Причина тут: http://forum.vingrad.ru/forum/topic-269805...0%B8%D1%8F.html
PM   Вверх
vinter
Дата 26.11.2013, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



 smile 
bsa, а сам-то не писал так?  smile 
Не, я не утверждаю, просто интересуюсь. Я посмотрел свои лабы второго курса и там тоже самое, примерно. Я тоже пятёрки получал. Всё таки новичкам хотя бы научиться, а чистоту прививать совместно с сами программированием может быть довольно сложно.
Вот кусок моей лабы, которой я очень гордился в своё время:
Код

int l,t,r,b,i,l1,r1,t1,b1;
int a[]={1,1,6,6,48,6,53,1};
int c[]={53,1,48,6,48,30,53,33};
int f[]={53,33,48,30,6,30,1,33};
int q[]={1,33,6,30,6,6,1,1};
int d[]={585,1,590,6,633,6,638,1};
int g[]={638,1,633,6,633,30,638,33};
int m[]={638,33,633,30,590,30,585,33};
int n[]={585,33,590,30,590,6,585,1};
int menuIsShow = 0;
int lastIsShow = 0;
int IsHelp = 0;
int cvet;
int lasticm = 0;
char name[30];
int s;
int p;
long int dec;

void Kursor_On(void)
{
  union REGS reg;
  reg.x.ax=1;
  int86(0x33,&reg,&reg);
}
void Kursor_Off(void)
{
  union REGS reg;
  reg.x.ax=0x02;
  int86(0x33,&reg,&reg);
}
void new_file(void)
{

  int file,bukva,j=174,k=0;
  unsigned size;
  char filename[50];
  char *buf;
  size=imagesize(150,200,500,240);
  buf=new char[size];
  getimage(150,200,500,240,buf);
  setfillstyle(SOLID_FILL,LIGHTMAGENTA);
  bar3d(150,200,500,240,0,0);
  outtextxy(170,205,"Enter the new file name:");
  setfillstyle(SOLID_FILL,LIGHTCYAN);
  bar3d(170,215,450,230,0,0);
  while((bukva=getch())!=13&&i<50&&k<50&&j<447)
  {
    sprintf(filename,"%c",bukva);
    outtextxy(j,220,filename);
    i++;
    j+=7;
    name[k]=*filename;
    k++;
    if(bukva==8)
       {
     k--;
     name[k]='\0';
     k--;
     name[k]='\0';
     setfillstyle(SOLID_FILL,LIGHTCYAN);
     bar(j-14,216,j,229);
     j-=14;
       }

  }
   name[k]='.';
   k++;
   name[k]='b';
   k++;
   name[k]='p';
   k++;
   name[k]='c';
   k++;
   name[k]='\0';
   k++;
  putimage(150,200,buf,COPY_PUT);
  delete []buf;
  Kursor_Off();
  setcolor(WHITE);
  setfillstyle(SOLID_FILL,WHITE);
  bar3d(50,50,600,400,0,0);
  Kursor_On();
  setfillstyle(SOLID_FILL,BLACK);
  bar(300,31,400,43);
  outtextxy(300,35,name);
  outtextxy(290,460,"New file was creat successfuly");
}


Это сообщение отредактировал(а) vinter - 26.11.2013, 12:11


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 26.11.2013, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vinter @  26.11.2013,  13:10 Найти цитируемый пост)
bsa, а сам-то не писал так?
У меня отец программист. Поэтому меня со школы учили делать отступы.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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