Կասե՞ք, թե գրածիս որ մասը կոնկրետ հասկանալի չի, կարծում եմ էդ դեպքում ձեզ էլ ավելի հեշտ կլինի հասկանալ՝ կիմանաք, թե կոնկրետ որտեղ եք թերանում:
Վարզորի գրածը խորհուրդ չեմ տա փորձեք հասկանալ, որովհետև սկսնակի համար շատ բարդ է ու մի փոքր ավելին պետք է իմանաք, քան ծրագրավորումը:
Իսկ իրականում Վարզորինը շա՜տ ավելի օրիգինալ ու օպտիմալ լուծում է
Հ.Գ. ես խնդրագիրք ունեմ (scan արած), Պոլիտեխնիկի ВТ-ում դրանով ենք անցնում, եթե ուզում եք, կարող եմ ուղարկել:
itoa պրոցեդուրան ընդունում է արժեքներ 2-ից մինչև 32 միջակայքում
Առանց մեծ ջանքերի կարելի է գրել ֆունկցիա, որը կվերադարձնի տրված թբի այս կամ այն համակարգով արտահայտումը: Բնական է, որ այդ համակարգերի քանակը պիտի սահմանափակ լինի, քանի որ տարբեր համակարգերում թվերի արտահայտման սիմվոլային բազմությունը կարող է յուրահատուկ լինել: Օրինակ` 16-ականում 9 թվից հետո սկսում են A-F սիմվոլները: Ըստ էության կարելի է գրել մինչև 36-ականների համար` 0-9 թվանշանները, ավելացված A-Z լատինական այբուբենի 26 սիմվոլները
Վերջին խմբագրող՝ Varzor: 20.02.2012, 20:25:
Լոխ մունք ենք, մնացածը` լոխ են...
armen9494 (20.02.2012)
Շնորհակալ եմ անչափ: Հասկացա վերջապես![]()
Արմեն ջան եթե դժվար չի կուղարկես իմ mail-ին. [email protected]
Վարզոր ախպեր մի բան ասեմ, չզարմանաս
Մենք երեկ խի՞ էինք էդքան խառնվել իրար՝ տո ցիկլով լուծում, տո երկուական կոդ, երեքական կոդ
Էսօր մեր տղեքից մեկին էս խնդիրը ասեցի, ընենց բան ասեց՝ աչքերս քյալիս էր թռել
Մի յուրահատուկ բան, որի անունն է լոգարիթմ
Էս էլ խնդիրը՝
էս դեպքում 2-ի k աստիճանի համար
իսկ էս դեպքում ընդհանրապես y-ի k աստիճանի համար#include <iostream.h>
#include <math.h>
void main ()
{
int x;
cin>>x;
cout<<(log(x)/log(2));
}
Ռուզան, եթե լուծումը ձեզ հետաքրքրեց, կարող եմ բացատրել, թե ինչ եմ արել: Իրոք որ էս եղանակը շատ պարզ ու բոլորի համար հասկանալի է (եթե իհարկե գիտենք լոգարիթմ)#include <iostream.h>
#include <math.h>
void main ()
{
int x,y;
cin>>x;
cin>>y;
cout<<(log(x)/log(y));
}
Վերջին խմբագրող՝ armen9494: 21.02.2012, 23:39:
Դա ամենակարճ լուծումն է զուտ գրելու տեսանկյունից: Իսկ 2-ական կոդով արտահայտումը պրոցեսորայյին տակտերի տեսանկյունից ամենակարճն է, ընդ որում` մասնավոր, կոնկրետ այդ դեպքի համար: Պատճառը հասկանալի է` թվերը երկուականով են պահվում հիշողությունում:
Ու ընդհանրապես մենակ ցիկլերով այդ խնդիրը լուծելու բազմաթիվ տարբերակներ կան` նվազող բաժանումով, աճողական բազմապատկումով, pow-ի միջոցով և այլն:
Այսպիսի խնդիրներն էլ հենց կոչված են ծրագրավորողի մտքի ճկունությունը և ծրագրավորման լեզվի իմացությունը ստուգելու համար:
Լոխ մունք ենք, մնացածը` լոխ են...
armen9494 (22.02.2012)
Լավ:
cout<<-ը արտածման օպերատոր է:
Ուրեմն սենց, մեզ ի՞նչ է պետք հաշվել k-ն ստանալու համար՝ log2x (լոգարիթմ 2 հիմքով x)
C++ լեզվում չկա այնպիսի օպերատոր, որով կարողանանք գրել լոգարիթմ 2 հիմքով x : Կա միայն մի օպերատոր լոգարիթմ հաշվելու համար, որի հիմքը e-ն է՝ log
Դե մաթեմատիկայից էլ գիտենք, որ՝
logba = (logca) / (logcb)
որտեղից էլ log2x=(logex) / (loge2)
իսկ c++-ում դրա գրելաձևը այսպես է՝ log(x)/log(2)
C++-ում Log ֆունկցիան բնական` e հիմքով լոգարիթմն է, մաթեմատիկական Ln() ֆունկցիայի համարժեքը:
Log2x=k, այսինքն k-ն այնպիսի թիվ է, որ 2k=x
Ըստ լոգարիթմերի կանոնի Logab=Logcb/Logca: Այսինքն կարելի է գրել` Logab=ln b/ln a: Մեր օրինակի դեպքում` Log2=ln x/ln 2=k: հենց այս օրինաչափությունն էլ C++ լեզվով գրվում է (log(x)/log(2));
Հ.Գ.
Չեմ կրկնվել, ուղղակի իմ գրելու ընթացքում Արմենն արդեն պատասխանել էր![]()
Լոխ մունք ենք, մնացածը` լոխ են...
մեկս մյուսին հերթ չի տալիս պատասխանելու համար
Վարզոր ախպեր մի բան հարցնեմ էլի: Մոտս c++-ի վիդեոուռոկներ ունեմ, բայց չեմ կարում ջոկեմ, թե որ վերսիան ա, եթե քեզ առաջին ֆայլը ուղարկեմ (որի մեջ ինստալլյացիան ա երևում, բայց չի երևում ինչ-որ վերսիա), ուղղակի տեսքից կարո՞ղ ես ասել, թե էդ որն ա:
Վերջին խմբագրող՝ armen9494: 22.02.2012, 17:26:
Այս պահին թեմայում են 1 հոգի. (0 անդամ և 1 հյուր)
Էջանիշներ