Задача по информатика С++

Взаимопомощ, полезна информация и всичко, извън темата на останалите секции
Потребителски аватар
scuba
R.I.P. Holy Diver
Мнения: 6971
Регистриран на: Вто 19 окт 2004 12:04
Автомобил:
Двигател:
Местоположение: София
Контакти:

Задача по информатика С++

Мнениеот scuba » Нед 09 дек 2012 10:16


Момции. детето нещо го е закъсало по информатика. Помагайте
Въведете число х (х<=1000) и след това изведете същото число, представено на естествен език. Например при въведено 7, програмата трябва да изведе „седем“; при въведено 243, програмата трябва да изведе „двеста четиридесет и три“.
i ako moje da q reshite sus SWITCH =]

Последна промяна от scuba на Нед 17 фев 2013 16:18, променено общо 1 път.




Потребителски аватар
Adnan
Мнения: 3536
Регистриран на: Чет 08 фев 2007 14:36
Автомобил:
Двигател:
Местоположение: София
Контакти:

Re: Задача по информатика

Мнениеот Adnan » Нед 09 дек 2012 20:51


Не знам на какъв език го искат това но ето ти ещо което съм писал на SQL Server, може да си го преведе на какъвто си иска език.
Ако детето има въпроси питай.

Код: Избери всички

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[translate] (@n nvarchar(15)) 
RETURNS nvarchar (255)
AS
BEGIN

declare @o nvarchar(255)
declare @dh nvarchar(50)
declare @h nvarchar(50)
declare @s nvarchar(50)
declare @d nvarchar(50)
declare @e nvarchar(2)
declare @v nvarchar(50)
declare @c nvarchar(50)


IF dbo.instring(@n,'.')=0
   begin
   set @v=@n
   set @e='0'
   end

IF dbo.instring(@n,'.')<>0
   begin
   set @v=dbo.trim(substring(@n,1,dbo.instring(@n,'.')-1))
   set @e=left(substring(@n,dbo.instring(@n,'.')+1,len(@n)),2)
   end

IF len(@v)> 5 set @o= ' NOT DEFINED!'

   IF len(@v)= 5
   begin
   --- desoto hilqdnite
      if left(@v,2)<20 set @dh= (select dbo.translate_sub2 (Left( @v, 2), 1)) + 'хиляди'
      if left(@v,2)>=20 set @dh= (select dbo.translate_sub2 (Left( @v, 2), 1))+(select dbo.translate_sub3 (SubString(@v,2,1),1)) + 'хиляди'

   --- stoticite
      if  SubString(@v,3,1)=1 set @s= 'сто'
      if  SubString(@v,3,1) between 2 and 3 set @s=(select dbo.translate_sub1(SubString(@v,3,1), 1))+ 'стa'
      if  SubString(@v,3,1)>3 set @s= (select dbo.translate_sub1(SubString(@v,3,1), 1))+'стотин'

   ---deseticite
      if substring(@v,4,1)=0 set  @d= (select dbo.translate_sub2 (right(@v,2),2))+(select dbo.translate_sub3 (right(@v,1), 1))
      if substring(@v,4,1)=1 set @d=(select dbo.translate_sub2 (right(@v,2), 2) )
      if substring(@v,4,1)>1 set  @d=' '+(select dbo.translate_sub2 (right(@v,2), 1) )+(select dbo.translate_sub3 (right(@v,1), 1))

      set @o=@dh+' '+ISnull( @s, '' )+@d +' лв.'
   end


   IF len(@v)= 4
   begin
   --- hilqdnite
      if  left(@v,1)=1 set @h= 'хиляда'
      if  left(@v,1)>=2 set @h= (select dbo.translate_sub1(left(@v,1), 1))+'хиляди'

   --- stoticite
      if  SubString(@v,2,1)=1 set @s= 'сто'
      if  SubString(@v,2,1) between 2 and 3 set @s=(select dbo.translate_sub1(SubString(@v,2,1), 1))+ 'стa'
      if  SubString(@v,2,1)>3 set @s= (select dbo.translate_sub1(SubString(@v,2,1), 1))+'стотин'

   ---deseticite
      if substring(@v,3,1)=0 set  @d= (select dbo.translate_sub2 (right(@v,2),2))+(select dbo.translate_sub3 (right(@v,1), 1))
      if substring(@v,3,1)=1 set @d=(select dbo.translate_sub2 (right(@v,2), 2) )
      if substring(@v,3,1)>1 set  @d=' '+(select dbo.translate_sub2 (right(@v,2), 1) )+(select dbo.translate_sub3 (right(@v,1), 1))

      set @o=@h+' ' +@s+@d +' лв.'
   end


   IF len(@v)= 3
   begin
   --- stoticite
      if  left(@v,1)=1 set @s= 'сто'
      if  left(@v,1) between 2 and 3 set @s=(select dbo.translate_sub1(left(@v,1), 1))+ 'стa'
      if  left(@v,1)>3 set @s= (select dbo.translate_sub1(left(@v,1), 1))+'стотин'

   ---deseticite
      if substring(@v,2,1)=0 set  @d= (select dbo.translate_sub2 (right(@v,2),2))+(select dbo.translate_sub3 (right(@v,1), 1))
      if substring(@v,2,1)=1 set @d=(select dbo.translate_sub2 (right(@v,2), 2) )
      if substring(@v,2,1)>1 set  @d=' '+(select dbo.translate_sub2 (right(@v,2), 1) )+(select dbo.translate_sub3 (right(@v,1), 1))

      set @o=@s+@d +' лв.'
   end

   IF len(@v)=2
   begin
   ---deseticite
      
      if left(@v,1)=1 set @d= (select dbo.translate_sub2 (@v, 1))
      if left(@v,1)>1 set @d= (select dbo.translate_sub2 (@v, 1))+(select dbo.translate_sub3 (right(@v,1),1))

      set @o=@d +' лв.'
   end

   IF len(@v)=1
      begin
   ---deseticite
      
      if @v='0' set @d= 'нула'
      if @v<>'0' set @d= (select dbo.translate_sub1 (@v,2))

   set @o=@d +' лв.'
   end
   ------------ edinicite
   IF @e not like '00'
   begin      
      if left(@e,1)=0 set @c= (select dbo.translate_sub3 (right(@e,1),2))
      if left(@e,1)=1 set @c= (select dbo.translate_sub2 (@e,2))
      if left(@e,1)>1 set @c= (select dbo.translate_sub2 (@e,2))+(select dbo.translate_sub3 (right(@e,1),2))

      set @o=@o + @c+' ст.'
   end


return @o
END
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO


Потребителски аватар
apa6o
Мнения: 1101
Регистриран на: Пон 27 ное 2006 9:56
Автомобил: Skoda Octavia 1Z
Двигател: BKD
Местоположение: Перник

Re: Задача по информатика

Мнениеот apa6o » Пон 10 дек 2012 9:56


Същото нещо, написано на C++, при нужда го имам и на Java, но в значително по-лош вид :)
Преди обаче да се ползва в готов вид е хубаво да се помисли кое как работи и защо, защото никак не е здравословно да мамим образователната система по такъв начин, затова дописах и купчината коментари :wink:
А детето да не ходи на курс Телерик, че скоро и там им бяха дали това за домашна :roll:
Също така детето ако има нужда от допълнителна помощ, пиши ми на ЛъСъ, в момента водя упражнения на C++ в Софийски университет и с радост бих се опитал да помогна, подчертавам БЕЗПЛАТНО :wink:

Код: Избери всички

#include<iostream>
using namespace std;
int main()
{
    bool flagArr[3]={true, true, true};
   //pomoshten masiv ot bulev tip, chrez koito
   //da sledim kakvo sme izveli, predvaritelno
   //inicializirame sas stoinosti true!
    int x, helpArr[4]={0, 0, 0, 0}, n=3;
   //pomoshten masiv v koito da zapishem hilqdite,
   //deseticite, stoticite i edinicite na x, kakto
   //i promenliva broqch za da se dvijim iz masiva
   //predvaritelno inicializirame sas stoinosti 0!
    setlocale(LC_ALL,"");
   //komanda s koqto da izvejda tekst na kirilica
   //ako kompa na koito se pusne ima nastroiki za
   //darjava BG
    do{
       cout<<"Въведете х :";
       cin>>x;
       if(!cin)
       {
           cerr<<"Тук нещо се обърка!"<<endl;
           system("pause");
           exit(1);
       }
    }while(x<0||x>1000);
   //vavejdane na x s proverka za korekten vhod
    while(x>0)
    {
       helpArr[n]=x%10;
       x=x/10;
       n--;
    }
   //zapalvane na pomoshtniq masiv sas saotvetnite
   //stoinosti
    if(helpArr[0]==1)
        cout<<"Хиляда";
   //proverka dali ne e vavedeno 1000
    else
    {
        switch(helpArr[1])
        {
           case 1:cout<<"сто ";break;
           case 2:cout<<"двеста ";break;
           case 3:cout<<"триста ";break;
           case 4:cout<<"четиристотин ";break;
           case 5:cout<<"петстотин ";break;
           case 6:cout<<"шестстотин ";break;
           case 7:cout<<"седемстотин ";break;
           case 8:cout<<"осемстотин ";break;
           case 9:cout<<"деветстотин ";break;
           default:flagArr[0]=false;
        }
      //proverka dali imame stotici za izvejdane
      //ako nqmame, vdigame edin flag che nqma
        if((flagArr[0]&&helpArr[2]==0&&helpArr[3]!=0)||
            (flagArr[0]&&helpArr[2]!=0&&helpArr[3]==0)||
         (flagArr[0]&&helpArr[2]==1))
            cout<<"и ";
      //proverka dali imame nujda ot bukvichkata i nqkade
      //sluchaite sa <cifra>0<cifra>, <cifra><cifra>0 ili
      //<cifra>1<cifra>
        switch(helpArr[2])
        {
           case 1:flagArr[1]=flagArr[2]=false;
               //vdigame narochno flagove che nqma desetici i edinici
               //za da si spestim ostanalite izvejdaniq
                  switch(helpArr[3])
                  {
                    case 0:cout<<"десет";break;
                    case 1:cout<<"единадесет";break;
                    case 2:cout<<"дванадесет";break;
                    case 3:cout<<"тринадесет";break;
                    case 4:cout<<"четиринадесет";break;
                    case 5:cout<<"петнадесет";break;
                    case 6:cout<<"шестнадесет";break;
                    case 7:cout<<"седемнадесет";break;
                    case 8:cout<<"осемнадесет";break;
                    case 9:cout<<"деветнадесет";break;
                 }break;
         //tuk se opravqme ako imam chislo mejdu 10 i 19
           case 2:cout<<"двадесет ";break;
           case 3:cout<<"тридесет ";break;
           case 4:cout<<"четиридесет ";break;
           case 5:cout<<"петдесет ";break;
           case 6:cout<<"шестдесет ";break;
           case 7:cout<<"седемдесет ";break;
           case 8:cout<<"осемдесет ";break;
           case 9:cout<<"деветдесет ";break;
           default:flagArr[1]=false;
         //vdigame flag, che e nqmalo destici za izvejdane
        }
      //proverka dali imame desetici za izvejdane
        if(flagArr[1]&&helpArr[3]!=0)
            cout<<"и ";
      //oshte edna proverka dali 6te ni trqbva bukvichkata i
        if(flagArr[2])
      //proverqvame dali ne sme izveli chislo mejdu 10 i 19 na
      //na prednata stapka
            switch(helpArr[3])
            {
               case 0:if(!flagArr[0]&&!flagArr[1])cout<<"нула";break;
            //proverqvame dali chisloto ne e nula
               case 1:cout<<"едно";break;
               case 2:cout<<"две";break;
               case 3:cout<<"три";break;
               case 4:cout<<"четири";break;
               case 5:cout<<"пет";break;
               case 6:cout<<"шест";break;
               case 7:cout<<"седем";break;
               case 8:cout<<"осем";break;
               case 9:cout<<"девет";break;
            }
      //proverka i izvejdane na edinicite
    }
    cin.sync();
    cin.get();
   //kod chrez koito zamrazvame ekrana za malko
    return 0;
}


Потребителски аватар
scuba
R.I.P. Holy Diver
Мнения: 6971
Регистриран на: Вто 19 окт 2004 12:04
Автомобил:
Двигател:
Местоположение: София
Контакти:

Re: Задача по информатика

Мнениеот scuba » Нед 17 фев 2013 16:17


НОВА задача :-( С++

Едно цяло положително число се нарича съвършено, ако е равно на сумата от своите делители (като в списъка на делителите тук не включваме самото число). Например 28 е съвършено, защото 28=1+2+4+7+14. Напишете функция, която определя дали едно число е съвършено. Напишете програма, която отпечатва първите няколко съвършени числа. Кое е следващото съвършено число след 28?


Потребителски аватар
apa6o
Мнения: 1101
Регистриран на: Пон 27 ное 2006 9:56
Автомобил: Skoda Octavia 1Z
Двигател: BKD
Местоположение: Перник

Re: Задача по информатика С++

Мнениеот apa6o » Нед 17 фев 2013 17:07


Код: Избери всички

#include<iostream>
#include<limits>
using namespace std;
bool isPerfect(int a)
{
   int sum=0;
   for(int i=1;(2*i)<=a&&!(sum>a);i++)
      if(a%i==0)
         sum+=i;
   return sum==a;
}
void findNextNPerfectsAfter(int n, int a)
{
   for(int i=a+1, j=0;j<n&&i<std::numeric_limits<int>::max();i++)
      if(isPerfect(i))
      {
         cout<<"Perfect number: "<<i<<endl;
         j++;
      }
}
void main()
{
   findNextNPerfectsAfter(4,0);
   findNextNPerfectsAfter(1, 28);
   cin.sync();
   cin.get();
}


И вземи кажи поне едно благодаря на мен и Adnan за труда :th_up


Потребителски аватар
scuba
R.I.P. Holy Diver
Мнения: 6971
Регистриран на: Вто 19 окт 2004 12:04
Автомобил:
Двигател:
Местоположение: София
Контакти:

Re: Задача по информатика С++

Мнениеот scuba » Нед 17 фев 2013 17:09


apa6o написа:И вземи кажи поне едно благодаря на мен и Adnan за труда :th_up

Благодаря Апашо :-) Пък на Аднан ще му го кажа лично като идем да се гмуркаме



Върни се в “ОФФ-Топик - други”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 38 госта