Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Potřeboval bych pomoct s napsáním komentářu do mého programu rozklad na prvočinitele.
#include <iostream>
using namespace std;
void rozklad()
{
int cislo;
int n,znamenko=0;
int prvocisla[1229]={
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,
127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,
251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,
389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,
541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,
677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,
839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,
1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,
1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,
1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,
1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,
1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,
1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,
1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,
1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,
2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,
2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,
2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,
2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,
2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,
2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,
3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,
3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,
3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,
3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,
3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,
3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,
3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,
4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,
4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,
4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,
4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,
4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,
4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023,5039,5051,5059,5077,5081,5087,5099,
5101,5107,5113,5119,5147,5153,5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,
5281,5297,5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,5437,5441,
5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,5557,5563,5569,5573,5581,5591,
5623,5639,5641,5647,5651,5653,5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,
5779,5783,5791,5801,5807,5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,
5903,5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,6079,6089,6091,
6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,6211,6217,6221,6229,6247,6257,6263,
6269,6271,6277,6287,6299,6301,6311,6317,6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,
6397,6421,6427,6449,6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,
6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,6733,6737,6761,6763,
6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,6863,6869,6871,6883,6899,6907,6911,6917,
6947,6949,6959,6961,6967,6971,6977,6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,
7103,7109,7121,7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,7253,
7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451,7457,7459,7477,7481,
7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,7549,7559,7561,7573,7577,7583,7589,7591,7603,
7607,7621,7639,7643,7649,7669,7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,
7789,7793,7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919,7927,7933,7937,7949,
7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8087,8089,8093,8101,8111,8117,8123,8147,
8161,8167,8171,8179,8191,8209,8219,8221,8231,8233,8237,8243,8263,8269,8273,8287,8291,8293,8297,
8311,8317,8329,8353,8363,8369,8377,8387,8389,8419,8423,8429,8431,8443,8447,8461,8467,8501,8513,
8521,8527,8537,8539,8543,8563,8573,8581,8597,8599,8609,8623,8627,8629,8641,8647,8663,8669,8677,
8681,8689,8693,8699,8707,8713,8719,8731,8737,8741,8747,8753,8761,8779,8783,8803,8807,8819,8821,
8831,8837,8839,8849,8861,8863,8867,8887,8893,8923,8929,8933,8941,8951,8963,8969,8971,8999,9001,
9007,9011,9013,9029,9041,9043,9049,9059,9067,9091,9103,9109,9127,9133,9137,9151,9157,9161,9173,
9181,9187,9199,9203,9209,9221,9227,9239,9241,9257,9277,9281,9283,9293,9311,9319,9323,9337,9341,
9343,9349,9371,9377,9391,9397,9403,9413,9419,9421,9431,9433,9437,9439,9461,9463,9467,9473,9479,
9491,9497,9511,9521,9533,9539,9547,9551,9587,9601,9613,9619,9623,9629,9631,9643,9649,9661,9677,
9679,9689,9697,9719,9721,9733,9739,9743,9749,9767,9769,9781,9787,9791,9803,9811,9817,9829,9833,
9839,9851,9857,9859,9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,9967,9973
}; //seznam všech prvočísel v intervalu <2 - 10000>
cout << "Rozklad cisla na prvocinitele v intervalu < 2 - 10000 >" << endl; //vstup na obrazovku
cout << "_______________________________________________________" << endl; //vstup na obrazovku
cout << "Zadejte vami pozadovane cislo: " ; //vstup na obrazovku
cin >> cislo; //načtení čísla
cout << "_______________________________________________________" << endl; //vstup na obrazovku
cout << "\n" << cislo << " = "; //načtení čísla se znaménkem =
for ( int i=0;i<1229;i++ ) //
{
n=0;
while(cislo%prvocisla[i]==0) //počítá kolikrát je dělitelné i-tým prvočíslem
{
cislo/=prvocisla[i];
n++;
}
if(n>0) //
{
if(znamenko!=0) cout<<" * "; //
znamenko++;
if(n==1)
{
cout<<prvocisla[i];
}
else
{
cout<<prvocisla[i]<<"^"<<n;
}
}
}
cout<<"\n"<<endl;
}
void main()
{
char volba='a';
while(1==1)
{
if(volba=='a') rozklad();
cout<<"Chcete pokracovat v rozkladu dalsiho cisla? [a/n] "; cin>>volba; cout<<endl;
if(volba=='n') break;
}
}
Děkuji moc mi to pomůže.
Offline
Fuj! To čo má byť (ani som si to bližšie nepozeral) ...
Tu máš toto
program Prvociselny_Rozklad;
var N: integer; {skúmané číslo}
D: integer; {delitele}
begin
write('Skmane kladne cilo vaccsie nez 1: ');
readln(N);
write('Prvociselny rozklad: ');
while N mod 2 = 0 do
begin
N:=N div 2;
write(2, ' ')
end;
D:=3; {prvý nepárny deliteľ}
while N > 1 do
begin
while N mod D = 0 do
begin
N:=N div D;
write(D, ' ')
end;
D:=D+2 {ďalší možný deliteľ}
end;
writeln
end.Offline
↑ bossd: Dobre ti rozumiem, že potrebuješ mať napísaný hentaký prasácky kód? Alebo chceš? Alebo nechápem? V tom čo som ja dal je to tak zrejmé, že to stačí len prečítať. Nerozumiem celkom, ty chceš, aby niekto naštudoval tvoj prásácky kód a okomentoval ho?
Offline

↑ pizet: Tak zase tak prasácké to není, v reálných programech na rozklad na prvočísla je také prvních několik tisíc prvočísel natvrdo uložených (z paměťových důvodů se ukládají jen diference, ale to je detail).
Vytknul bych ale
* pole s prvočísly by mělo být globální (nikoliv v proceduře)
* místo while(1==1) while(true), nebo ještě lépe do ... while bez breaku
* výstup cout << "Rozklad cisla na prvocinitele v intervalu < 2 - 10000 >" << endl; přesunout do mainu
* místo znamenko, znamenko++ dát bool a nazvat ho třeba vypsanDelitel, na začátku nastavit na false a pak
if(nalezenDelitel) cout<<" * "; // nevypisujeme prvniho, musime vypsat *
else vypsanDelitel=true; //po teto iteraci uz bude delitel vypsan
Na zbylá dvě místa s nedokončenými komentáři lze dopsat např.
// zkousime postupně delitelnost vsemi prvocisly
// nasli jsme delitele
Offline
bossd napsal(a):
Tak s toho jsem trochu jelen. Jsem rád že jsem dal dohromady něco takového co mám. Mohl bys tvůj návrh vepsat do mojeho kodu.
Ale ja nerozumiem, že niekto si napíše program a chce od druhých, aby mu ho okomentovali? Sorry, ale to som fakt ešte nikde nevidel. Ani by mi to nenapadlo,že niekto také niečo môže žiadať, pretože keď už raz niečo napíše tak ako nemôže vedieť, že čo to je.
Dobre ale koniec OT. Je to len môj názor, ktorý môže byť hlúpy.
Offline
↑ bossd: Ok, tvojou úlohou je nájsť prvočíselný rozklad. Podla mňa to riešenie, ktoré som ukázal ja je omnoho jednoduchšie. Ak by si ho nevedel prepísať do C++, tak to je najmenej, to ti môžem pomôcť.
Však sa len pozri na ten program a bude ti to jasné. Či nutne to potrebuješ mať tak ako to máš?
Offline

A není tvůj úkol takovíto. Správný kód máš v posledním příspěvku od Kondra. (jenom tam je od 0 do 100, tak tam musíš dát to svoje větší pole (a místo PP (velikost pole) napsat těch 1229). Jestli ne (jestli máš rozkládat vždy jedno konkrétní číslo), tak to můžeš použít stejně, alespoň to bude správně.
Offline