Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2011, 14:19   #1
1emm
Новичок
Джуниор
 
Регистрация: 05.03.2011
Сообщений: 5
По умолчанию C++. Проверка на прогрессию.

Заданием было написать программу, проверяющую, "Являются ли цифры числа последовательными членами алгебраической или геометрической прогрессии". Вышло нечто подобное:

Код:
#include <iostream>
using namespace std;

bool aprogr(int a)
{  bool c=true;
   int ost1=a%10;
   int ost2=a%100;
   int d=ost1-ost2;
   for(a;a>0;a/10)
     if (a%10-a%100!=d)
       c=!c;
   return c;
}

bool gprogr(int a)
{  bool c=true;
   int ost1=a%10;
   int ost2=a%100;
   int d=ost1/ost2;
   for(a;a>0;a/10)
     if ((a%10)/(a%100)!=d)
       c=!c;
   return c;
}

int main()
{int a;
 cin >> a;
 if (a<10)
 cout << "A is too short";
 if (aprogr(a)==false)
 cout << "not alg progressive";
 else
 cout << "alg progressive";
 if (gprogr(a)==false)
 cout << "not geom progressive";
 else
 cout << "geom progressive";
 return 0;
}
Проблема: не выдает результата, судя по всему проблема с обработкой функций. Кто в этом шарит лучше меня, помогите найти ошибку, а?

Последний раз редактировалось 1emm; 05.03.2011 в 14:54.
1emm вне форума Ответить с цитированием
Старый 05.03.2011, 15:01   #2
DaysOfGrace
Пользователь
 
Регистрация: 03.03.2011
Сообщений: 12
По умолчанию

Код:
for(a;a>0;a/10)
     if (a%10-a%100!=d)
       c=!c;
замени на

Код:
for(a;a>0;a/10)
{
    if ( (a%10-a%100 ) != d )
       c = false;
}
во второй функции -

Код:
for(a;a>0;a/10)
{
     if ((a%10)/(a%100)!=d)
       c=false;
}

Последний раз редактировалось DaysOfGrace; 05.03.2011 в 15:05.
DaysOfGrace вне форума Ответить с цитированием
Старый 05.03.2011, 15:16   #3
1emm
Новичок
Джуниор
 
Регистрация: 05.03.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от DaysOfGrace Посмотреть сообщение
замени на

Код:
for(a;a>0;a/10)
{
    if ( (a%10-a%100 ) != d )
       c = false;
}
во второй функции -

Код:
for(a;a>0;a/10)
{
     if ((a%10)/(a%100)!=d)
       c=false;
}

В общем-то именно так функции выглядели первоначально, но разницы никакой, функции все так же не обрабатываются.
1emm вне форума Ответить с цитированием
Старый 05.03.2011, 15:27   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

А я вот что придумал! Проверяй
Код:
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

bool aprogr(int a)
{  bool c = true;
   char d;
   int i;
   char a_s[10];
   itoa(a, a_s, 10);
   d = (a_s[1] - a_s[0]);
   for (i = 0; i < (strlen(a_s)-1); i++)
     if ((a_s[i+1]-a_s[i]) != d)
     {
       c = false;
       break;
     }
   return c;
}

bool gprogr(int a)
{
   bool c = true;
   float d;
   int i;
   char a_s[10];
   itoa(a, a_s, 10);
   d = ((a_s[1]-48)/(a_s[0]-48));
   for (i = 0; i < (strlen(a_s)-1); i++)
     if (((a_s[1]-48)/(a_s[0]-48)) != d)
     {
       c = false;
       break;
     }
   return c;
}

int main()
{int a;
 cin >> a;
 if (a<10)
 cout << "A is too short" << endl;
 if (aprogr(a)==false)
 cout << "not alg progressive" << endl;
 else
 cout << "alg progressive" << endl;
 if (gprogr(a)==false)
 cout << "not geom progressive" << endl;
 else
 cout << "geom progressive" << endl;
 system("pause");
 return 0;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 05.03.2011, 15:42   #5
1emm
Новичок
Джуниор
 
Регистрация: 05.03.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
веряй
Код:
bool gprogr(int a)
{
   bool c = true;
   float d;
   int i;
   char a_s[10];
   itoa(a, a_s, 10);
   d = ((a_s[1]-48)/(a_s[0]-48));
   for (i = 0; i < (strlen(a_s)-1); i++)
     if (((a_s[1]-48)/(a_s[0]-48)) != d)
     {
       c = false;
       break;
     }
   return c;
}
Это что-то для меня малопонятное, к тому же работает некорректно, а первая функция работать начала, спасибо =)
1emm вне форума Ответить с цитированием
Старый 05.03.2011, 15:46   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

БЛИН!! ИЗВИНЯЮСЬ! ТУПАНУЛ!
ВОТ ФУНКЦИЯ ДЛЯ ГЕОМЕТРИЧЕСКОЙ
Код:
bool gprogr(int a)
{
   bool c = true;
   float d;
   int i;
   char a_s[10];
   itoa(a, a_s, 10);
   d = ((a_s[1]-48)/(a_s[0]-48));
   for (i = 0; i < (strlen(a_s)-1); i++)
     if (((a_s[i+1]-48)/(a_s[i]-48)) != d)
     {
       c = false;
       break;
     }
   return c;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 05.03.2011, 15:54   #7
1emm
Новичок
Джуниор
 
Регистрация: 05.03.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Код:
bool gprogr(int a)
{
   bool c = true;
   float d;
   int i;
   char a_s[10];
   itoa(a, a_s, 10);
   d = ((a_s[1]-48)/(a_s[0]-48));
   for (i = 0; i < (strlen(a_s)-1); i++)
     if (((a_s[i+1]-48)/(a_s[i]-48)) != d)
     {
       c = false;
       break;
     }
   return c;
}
Так она работает, но выдает true при значении а, если ее цифры убывают.

З.Ы. если не сложно, не мог бы ты объяснить, что делает
1) itoa(a, a_s, 10);
2)(((a_s[i+1]-48)/(a_s[i]-48)) != d) (и откуда тут взялось 48)
1emm вне форума Ответить с цитированием
Старый 05.03.2011, 16:16   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Так ну вот! Вроде прогнал как следует! Всё вроде правильно!
проверяй
Код:
bool gprogr(int a)
{
   bool c = true;
   float d;
   int i;
   char a_s[10];
   itoa(a, a_s, 10);
   d = (static_cast<float>(a_s[1]-48)/static_cast<float>(a_s[0]-48));
   for (i = 0; i < (strlen(a_s)-1); i++)
     if ((static_cast<float>(a_s[i+1]-48)/static_cast<float>(a_s[i]-48)) != d)
     {
       c = false;
       break;
     }
   return c;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 05.03.2011, 16:24   #9
1emm
Новичок
Джуниор
 
Регистрация: 05.03.2011
Сообщений: 5
По умолчанию

Огромное спасибо, заработала =)
1emm вне форума Ответить с цитированием
Старый 05.03.2011, 16:26   #10
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Если помог, кликни весы
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на арифметическую прогрессию Оксана22081989 Помощь студентам 1 29.01.2010 11:33
Скажите в чем ошибка, как в массиве найти арифметическую прогрессию и вывести элементы на экран? Lodyr Помощь студентам 0 21.12.2009 16:32
Пишу курсовую нужно решить задачу для примера на геометрическую прогрессию (Pascal) =|винтик|= Помощь студентам 4 25.05.2009 16:38
Проверка Манжосов Денис :) Общие вопросы Delphi 4 17.10.2008 16:27