Ruzanna Stepanyan (18.10.2012)
#include <iostream>
using namespace std;
void main()
{
int i, j;
double x[10], tmp;
//զանգվածի ներմուծում
for (i=0; i<10; i++)
{
cin >> x[i];
cout << endl;
}
for (i=0; i<10; i++)
{
for(j=i+1;j<10;j++)
{
if(x[i] < x[j])
{
tmp = x[j];
x[j]= x[i];
x[i]= tmp;
}
}
}
for (i=0; i<10; i++)
{
cout << x[i] << " ";
}
}
Ruzanna Stepanyan (18.10.2012)
Եղբայր, C++ում զանգվածնեը համարակալվում են 0-ից, հետևաբար i-ի ցիկլը պիտի սկսես 0-ից, որպեսզի յ=i+1 -ի պարագայում x[i] < x[j] պայմանի կատարման դեպքում 0 և 1 ինդեքսով տարրերը տեղերով փոխես
Ու ինչպես տեսնում եմ արդեն գլխի ես ընկել, որ տենց պիտի լինի: Դրա ապացույցն է կոդի նոր տարբերակը![]()
Լոխ մունք ենք, մնացածը` լոխ են...
DavitH (19.10.2012), Ruzanna Stepanyan (18.10.2012)
Եթե DavitH-ն չի նեղանա, ապա ես կբացատրեմ:
j-ով ցկլը կազմվում է նրա համար, որպեսզի զանգվածի տարրը համեատվի իրեն հաջորդող բոլոր տարրերի հետ: Եթե հաջորդող տարրերից որևէ մեկը ավելի մեծ է, ապա այդ տարրի հետ տեղերով փոխում ենք, որպեսզի ավելի մեծ տարրը ավելի առաջ գա:
Բնականաբար, քանի որ զանգվածի բոլոր տարրերը իրար հետ համեմատվում են, ապա ամեն j-ով ցիկլի ավարտից հետո i-երորդ տարրի արժեքը ամենամեծն է լինում i+1-ից մինչև n-1 տարրերի մեջ և փոքր է լինում i-1 տարրից, ինչն էլ ապահովում է, որ տարրերը նվազման կարգով դասավորված լինեն:
Ըստ էության, եթե պահանջվեր տարրերը դասավորել աճման կարգով, ապա բավական է փոխել պայմանի տողում նշանը և խնդիրը կլուծվեր:
Լոխ մունք ենք, մնացածը` լոխ են...
Ruzanna Stepanyan (29.10.2012)
Varzor (19.10.2012)
Դե լավ է, բոլորս էլ գոհ մնացինքԱպրեք շատ, ինձ օգնելու համար:
Բայց ես մտածում եմ ճիշտ կլինի մասնագետի մոտ պարապեմ, որ ավելի խորությամբ սովորեմ, որպեսզի աշակերտներիս պատրաստեմ օլիմպիադայի:
Ruzanna Stepanyan (29.10.2012), Varzor (22.10.2012)
Խնդիրս չի ստացվում, խնդրում եմ օգնեք.
Խնդիր
Տրված են հարթության երեք կետերի կոորդինատները: Հաշվել և արտածել այն կետի կոորդինատների գումարը, որն ամենից մոտ է գտնվում կոորդինատների սկզբնակետին:
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
double x1, y1, x2, y2, x3, y3, d1, d2, d3, min, k, h;
cout<<"x1="; cin>>x1;
cout<<"y1="; cin>>y1;
cout<<"x2="; cin>>x2;
cout<<"y2="; cin>>y2;
cout<<"x3="; cin>>x3;
cout<<"y3="; cin>>y3;
d1=sqrt((pow(x1,2))+(pow(y1,2)));
d2=sqrt((pow(x2,2))+(pow(y2,2)));
d3=sqrt((pow(x3,2))+(pow(y3,2)));
if(d1<d2)
{
min=d1;
h=1;
}
else
{
min=d2;
h=2;
}
if(d3<min)
{
min=d3;
h=3;
}
if(h=1)
{
k=x1+y1;
}
else
if(h=2)
{
k=x2+y2;
}
else
k=x3+y3;
cout<<"k="<<k<<endl;
}
Պետք է լինի ==Կոդ:if(h=1) { k=x1+y1; } else if(h=2) { k=x2+y2; } else k=x3+y3;
Ruzanna Stepanyan (30.10.2012)
Ruzanna Stepanyan (30.10.2012)
Խնդրում եմ ասեք, թե ինչն եմ սխալ արել այս խնդրում, որ երկու պատասխան է ստացվում:
Հաշվել և արտածել այն ամենամեծ քառնիշ թիվը, որը հանդիսանում է 3-ի աստիճան:
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
int i;
double k;
for(i=9999; i>=1000; i--)
{
for(k=0; k<=100; k++)
{
if((pow(3,k)==i))
{
cout<<"i="<<i<<endl;
break;
}
}
}
}
Առաջարկում եմ ավելի կարճ լուծելու ձևԿոդ:#include <iostream> #include <math.h> using namespace std; void main() { int i; double k; bool s=false; for(i=9999; i>=1000; i--) { for(k=0; k<=100; k++) { if((pow(3,k)==i)) { cout<<"i="<<i<<endl; s=true; break; } } if (s) break; } }
Կոդ:#include <iostream> using namespace std; void main() { int ans = 1; while (ans * 3 < 10000) ans *= 3; cout << ans << endl; }
Եթե պայմանը while (ans < 10000) լինի, ապա ans *= 3 գործողությունը կկատարվի նաև ans-ի՝ փնտրվող 3-ի աստիճանին հավասար լինելու դեպքում, ու ans-ը կդառնա 10000-ից մեծ թիվ: Դրա փոխարեն կարելի է գրել.
Ձեր առաջարկած տարբերակը շատ հավանեցի, բայց մի հարց տամ, չեմ կարող while (ans * 3 < 10000)-ի փոխարեն գրել while (ans < 10000)
Կոդ:do { ans *= 3; } while ( ans < 10000);Քանի որ երկու ներդրված ցիկլ կա, ներսի ցիկլում break; անելը ընդհատում է միայն ներսի ցիկլը, դրա համար առաջին ավելացրած տողում հայտարարում եմ փոփոխական, որը false է, եթե պատասխանը դեռ չի գտնվել, ու true՝ հակառակ դեպքում: Երբ պատասխանը գտնվում է, երկրորդ ավելացված տողով փոփոխականը true եմ դարձնում, իսկ արտաքին ցիկլում՝ ներքինի ավարտից հետո, ստուգում եմ. եթե պատասխանը գտնվել է, ապա ընդհատում եմ արտաքին ցիկլը, եթե ոչ ցիկլը շարունակվում է:մեկ էլ խնդրում եմ ձեր կարմիր գրածները բացատրեք, դրանք ինձ շատ անծանոթ են![]()
Այս պահին թեմայում են 1 հոգի. (0 անդամ և 1 հյուր)
Էջանիշներ