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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не могу понять в чём ошибка 
:(
    Опции темы
Игорь1024
Дата 8.10.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

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



Делал задачу. Попытался к ней написать программу. Не получается у меня понять в чём у меня ошибка...
Вот код (это черновой вариант, так что здесь нет никакой оптимизации и.т.п. Короче коряво всё)
Код

#include <iostream>
#include <fstream>
#include "math.h"
using namespace std;
int n,num=0,group,start,temp,temp1,i,add1=111,add2=999;
unsigned long int svalue=2000,value;
char buffer[10];
float buf;
void final()

  i=n-start;
  value=svalue;
  cout<<"svaluerightnow= "<<svalue<<'\n';
  value/=1000;
  value-=20000;
  cout<<"svalueafter= "<<svalue<<'\n';//даже после деления результат 40000000
  for(int j=0;j<(group);++j)
  {
   if((j%2)==0)
   {
    value+=add1;
   }
   else if((j%2)==1)
   {
    value+=add2;
   }
  }
  cout<<"VALUE= "<<value<<'\n';
}
float round(float d)

  d/=8;
  temp=d;
  cout<<'\n'<<"temp= "<<temp;
  if((d-temp!=0)&&((d+0.5)-temp)<1){cout<<"ceil(d+0.5)= "<<ceil(d+0.5);return ceil(d+0.5);}
  else {
     cout<<'\n'<<"d= "<<d;
     return ceil(d);
  }
}
void getstart()
{
    switch (group)
    {
    case 1:start=1;svalue=0;
        break;
    case 2:start=11;svalue=10;
        break;
    case 3:start=20;svalue=111;
        break;
    case 4:start=29;svalue=2000;
        break;
    default:
        start+=29+((group-4)*8);
        temp=100;
        temp1=900;
        svalue=2000;
        for(i=1;i<(group-1);i++)
        {   
            cout<<"svalue= "<<svalue<<" ";
            if(i%2==1)
            {
            temp*=10;
            add1+=temp;
            cout<<"add1= "<<add1<<'\n';
            }
            else if(i%2==0)
            {
            svalue*=10;
            temp1*=10;
            add2+=temp1;
            cout<<"add2= "<<add2<<'\n';
            }
                
        }
        break;

    }
    svalue*=2000;
    cout<<'\n'<<"start= "<<start<<'\n';
    final();
}
int count()
{   
    ifstream input("in.txt");
    input>>buffer;
    n=atoi(buffer);
    if(n>0&&n<11){group=1;}
    if(n>10&&n<20){group=2;}
    if(n>19&&n<29){group=3;}
    if(n>28){ 
    buf=n-28;
    cout<<"buf= "<<buf;
    group=round(buf)+3;
    cout<<"group start= "<<group<<'\n';
    }
    getstart();
    if(group==0){cout<<'\a'<<"Error! ";goto end;}
    cout<<"group= "<<group;
    goto end;
        end:return 0;
}

int main()
{   
    count();
    cout<<'\n'<<"V= "<<value<<'\n';
    cin>>n;
    return 0;
}




А вообще задача была в том , чтобы считать число n, найти в числовом ряду элемент с индексом n (но каждое число ряда не должно содержать в десятичной записи цифр предыдущего и должно быть максимально "близким" к предыдущему).
Перебором делать долго (1<n<500);
Я нашёл зависимость (а вдруг ошибся..) и делал по ней.

Почти уверен, что здесь у меня простая ошибка...  Или вообще алгоритм не тот взял...

Добавлено @ 16:16
Вот последовательность:
0
1
2
3
4
5
6
7
8
9
10
22
30
41
50
61
70
81
90
111
200
311
400
511
600
2000
3111

и так далеечисла можно сгрупировать по разрядам- 1 группа- 10 эл, 2 и 3- по 9 каждая, далее каждая группа из 8 чисел сосотоит.

Это сообщение отредактировал(а) Игорь1024 - 8.10.2010, 16:17
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
FlySabaka
Дата 8.10.2010, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.9.2010
Где: г.Новосибирск

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



Действительно, а в чём ошибка-то? Думаю что не хватает подробностей в описании проблемы ... 
PM MAIL   Вверх
Crafty
Дата 8.10.2010, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

  i=n-start;
  value=svalue;
  cout<<"svaluerightnow= "<<svalue<<'\n';
  value/=1000;
  value-=20000;
  cout<<"svalueafter= "<<svalue<<'\n';//даже после деления результат 40000000

Тут скорей всего value должно выводиться во второй строке вывода, значение svalue и не будет менять так как вы с ним ничего не делаете.

Код

 ifstream input("in.txt");
    input>>buffer;
    n=atoi(buffer);

Не проще ли сделать buffer типа int, и не использовать ф-цию atoi.

Это сообщение отредактировал(а) Crafty - 8.10.2010, 19:23
PM MAIL   Вверх
Игорь1024
Дата 8.10.2010, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

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



Нашёл проблему. Сделал вывод-надо больше спать smile

Это сообщение отредактировал(а) Игорь1024 - 8.10.2010, 23:57
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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