Diskuze: úkol prvočísla
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 50 zpráv z 52.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Snaž se něco napsat sám. Pak to tu pošli a my ti poradíme. Celé to za Tebe určitě psát nebudeme.
#include <stdio.h>
#include <stdlib.h>
int je_prvoc (int c)
{
int i;
for (i = 2; i < c; i++)
{
if ( c % i == 0)
return 0;
}
return 1;
}
int main()
{
int cislo = 200000;
int i, p1,a,b,pocet=0;
printf("Zadej a od : ");
scanf("%d",&a);
printf("Zadej b do : ");
scanf("%d",&b);
for (i=2; i <= cislo; i++)
{
p1=je_prvoc(i);
if (p1!=0)
{
if ((i>a) && (i<b))
printf("\n%5d",i);
}
}
while(cislo>0)
{
pocet++;
cislo=cislo/10;
}
printf("Pocet:%d",pocet);
return 0;
}
Mám to takhle,ale prostě nevím jak tam dát aby to obsahovalo nulo a
spočítalo čísla v rozshau a,b.
Vlož to znovu přes ikonku vložit kód - takové 2 papárky s pluskem.
#include <stdio.h>
#include <stdlib.h>
int je_prvoc (int c)
{
int i;
for (i = 2; i < c; i++)
{
if ( c % i == 0)
return 0;
}
return 1;
}
int main()
{
int cislo = 200000;
int i, p1,a,b;
printf("Zadej a od : ");
scanf("%d",&a);
printf("Zadej b do : ");
scanf("%d",&b);
for (i=2; i <= cislo; i++)
{
p1=je_prvoc(i);
if (p1!=0)
{
if ((i>a) && (i<b))
printf("\n%5d",i);
}
}
return 0;
}
V prvom rade si musíš ujasniť čo sú to prvočísla.
Ak to nevieš, použi google.
C neumim, ale pokud koukám dobře:
p1=je_prvoc(i);
if (p1!=0) { ... }
můžeš napsat
if (je_prvoc(i)) { ... }
dávat print do toho ifu funkce je_prvoc je prasárna, ale on učitel je zřejmě nic jiného neučil.
Co je za prasárnu na
if (je_prvoc(i)) //vrací 1(true) nebo 0(false)
{
printf("\n%d je prvočíslo",i);
}
?
V céčku je to trošku inakšie.
toto:
p1=je_prvoc(i);
vypíše chybu:
undefined reference to `je_prvoc'
Najprv by musel napísať funkciu: je_prvoc() a až potom ju môže
použiť!
Fce na prvočísla mi přijde OK, ten cyklus už ne. Měl bys tma mít něco jako:
for (i = a; i <= b; i++)
Co se týče té číslice 0, asi bych si to převedl na znaky, jestli to nějak jde, v céčku nedělám.
Riešenie je napríklad takéto:
#include <stdio.h>
#include <math.h>
void prvocislo(int n)
{
int je_prv = 1;
int i;
for(i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) {
je_prv = 0;
break;
}
}
if (je_prv)
printf("%d\n", n);
}
int main(void)
{
int i, a, b;
scanf("%d", &a);
scanf("%d", &b);
for (i = a; i <= b; i++)
prvocislo(i);
return 0;
}
len či budeš vedieť vysvetliť učiteľovi ako to funguje....:P
A kde máš tu kontrolu na číslici 0?
funkce je_prvcoc() už podle názvu by měla vracet true nebo false.
Máš pravdu, oprava:
namiesto
if (je_prv)
printf("%d\n", n);
treba dať
if (je_prv && n != 0)
printf("%d\n", n);
Sdraco, nehľadaj v céčku nič zvláštneho, ty ho vlastne poznáš a
určite lepšie ako ja , len v
ňom nie sú objekty, všetko ostatné je rovnaké ako v iných jazykoch.
Jo, libco to má divně, ale HoBi to myslel dobře.
Ako som už uviedol vyššie, funkcia je_prvcoc() nie je súčasťou knihovní jazyka C a treba si ju najprv napísať!!! až potom sa dá použiť!
Tak samozřejmě, když je pojmenovaná česky Ale on jí tam má a pak ji volá,
takže nevidím problém.
Ne, v zadání je, které mají číslici 0. Takže třeba 10, 105 atd. Ty kontroluješ něco jiného.
Sorry, špatne som si pozrel jeho kód.
Bože, asi som už unavený.
Je to ako písal sdraco, treba to previesť na znaky a tak nájsť '0' v
číslach.
Vyskúšaj toto:
#include <stdio.h>
#include <string.h>
#include <math.h>
int prvocislo(int n)
{
int je_prv = 1;
int i;
for(i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) {
je_prv = 0;
break;
}
}
if (je_prv)
printf("%d\n", n);
}
int main(void)
{
int i, j, a, b;
char c[20];
scanf("%d %d", &a, &b);
for (i = a; i <= b; i++) {
sprintf(c, "%i", i); // preveď integer na string
for (j = 0; j < strlen(c); j++) { // prejdi strig po znakoch
if (c[j] == '0') { // ak je tam nula
prvocislo(i); // volaj funkciu
break;
}
}
}
return 0;
}
Nebylo by lepší kontrolovat přítomnost 0 v číslu pomocí regulárního
výrazu?
Rozhodni sa čo vlastne chceš. Súčet vypísaných čísiel alebo ich počet.
To je zbytečně složitý, stačí jen zjistit zda tam je nebo není přes funkci strchr
Třeba takhle
#include <stdio.h>
#include <string.h>
#include <math.h>
int prvocislo(int n)
{
int i;
for(i = 2; i <= sqrt(n); ++i)
if (n % i == 0) return 0;
return 1;
}
int main(void)
{
int i,a, b,num=0;
char c[20];
scanf("%d %d", &a, &b);
for (i = a; i <= b; i++) {
sprintf(c, "%i", i);
if strchr(c,'0')
if (prvocislo(i)) num++;
}
printf("Počet prvočísel s nulou je %d\n", num);
return 1;
}
Skúsil som to tvoje a nefunguje mi to.
Možno som to špatne zapísal do kódu:
#include <stdio.h>
int maNulu(unsigned num){
while(num >= 10){
if(num % 10 == 0)
return 1;
num /= 10;
}
return !num;
}
int main(void)
{
unsigned int i, j, a, b;
scanf("%d %d", &a, &b);
for (i = a; i <= b; i++) {
j = maNulu(i);
printf("%u\n", j);
}
return 0;
}
takto:
int prvocislo(int n)
{
int je_prv = 1;
int i;
for(i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) {
je_prv = 0;
break;
}
}
if (je_prv) {
printf("%d\n", n);
return 1;
}
}
int main(void)
{
int i, j, a, b, pocet = 0;
char c[20];
scanf("%d %d", &a, &b);
for (i = a; i <= b; i++) {
sprintf(c, "%i", i); // preveď integer na string
for (j = 0; j < strlen(c); j++) { // prejdi strig po znakoch
if (c[j] == '0') { // ak je tam nula
pocet += prvocislo(i); // volaj funkciu
break;
}
}
}
printf("\nPocet vypisanych prvocisiel je %d.", pocet);
return 0;
}
Změň ještě tu funkci prvocislo() tak aby vracela 1 nebo 0.
stdio.h, math.h a string.h
Možno je problém v tom, že to len skopíruješ. Môže to tam vložiť iné znaky ako vidíš v kóde.
Možno je problém v tom, že to len skopíruješ. Môže to tam vložiť iné znaky ako vidíš v kóde.
Zobrazeno 50 zpráv z 52.