NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.
Avatar
Petr
Neregistrovaný
Avatar
Petr:8.2.2014 18:55

Ahoj,potřeboval bych pomoct s úkolem : Sestavte program, který vypíše a spočítá všechna prvočísla v rozsahu (a,b) obsahujicí alespoň jednu číslici 0. Hodnoty a,b zadá uživatel. Jak to napsat v C. Děkuju za rady :)

 
Odpovědět
8.2.2014 18:55
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:8.2.2014 18:59

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.

 
Nahoru Odpovědět
8.2.2014 18:59
Avatar
Petr
Neregistrovaný
Avatar
Petr:8.2.2014 19:02

#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",po­cet);
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.

 
Nahoru Odpovědět
8.2.2014 19:02
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na
Honza Bittner:8.2.2014 19:06

Vlož to znovu přes ikonku vložit kód - takové 2 papárky s pluskem.

Nahoru Odpovědět
8.2.2014 19:06
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Petr
Neregistrovaný
Avatar
Petr:8.2.2014 19:08
#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;
}
 
Nahoru Odpovědět
8.2.2014 19:08
Avatar
Odpovídá na
Libor Šimo (libcosenior):8.2.2014 19:14

V prvom rade si musíš ujasniť čo sú to prvočísla.
Ak to nevieš, použi google.

Nahoru Odpovědět
8.2.2014 19:14
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na
Honza Bittner:8.2.2014 19:15

C neumim, ale pokud koukám dobře:

  1. Proč projíždíš cyklus 200,000 krát, když chceš čísla od A do B?
  2. místo
p1=je_prvoc(i);
if (p1!=0) { ... }

můžeš napsat

if (je_prvoc(i)) { ... }
  1. do toho ifu ^^ už dáš rovnou print.
Editováno 8.2.2014 19:16
Nahoru Odpovědět
8.2.2014 19:15
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Michal Žůrek - misaz:8.2.2014 19:43

dávat print do toho ifu funkce je_prvoc je prasárna, ale on učitel je zřejmě nic jiného neučil.

Editováno 8.2.2014 19:43
 
Nahoru Odpovědět
8.2.2014 19:43
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Honza Bittner:8.2.2014 19:47

Co je za prasárnu na

if (je_prvoc(i)) //vrací 1(true) nebo 0(false)
{
  printf("\n%d je prvočíslo",i);
}

? :)

Editováno 8.2.2014 19:48
Nahoru Odpovědět
8.2.2014 19:47
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):8.2.2014 20:00

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ť!

Editováno 8.2.2014 20:02
Nahoru Odpovědět
8.2.2014 20:00
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:8.2.2014 20:10

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.

Nahoru Odpovědět
8.2.2014 20:10
New kid back on the block with a R.I.P
Avatar
Benjibs
Člen
Avatar
Odpovídá na Honza Bittner
Benjibs:8.2.2014 20:15

To by aj mňa zaujímalo . . .

Nahoru Odpovědět
8.2.2014 20:15
1 + 1 = 2
Avatar
Libor Šimo (libcosenior):8.2.2014 20:19

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

Nahoru Odpovědět
8.2.2014 20:19
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Hartinger:8.2.2014 20:21

A kde máš tu kontrolu na číslici 0? :P

Nahoru Odpovědět
8.2.2014 20:21
New kid back on the block with a R.I.P
Avatar
Odpovídá na Honza Bittner
Michal Žůrek - misaz:8.2.2014 20:24

funkce je_prvcoc() už podle názvu by měla vracet true nebo false.

 
Nahoru Odpovědět
8.2.2014 20:24
Avatar
Odpovídá na David Hartinger
Libor Šimo (libcosenior):8.2.2014 20:30

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 :P, len v ňom nie sú objekty, všetko ostatné je rovnaké ako v iných jazykoch.

Nahoru Odpovědět
8.2.2014 20:30
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Žůrek - misaz
David Hartinger:8.2.2014 20:30

Jo, libco to má divně, ale HoBi to myslel dobře.

Nahoru Odpovědět
8.2.2014 20:30
New kid back on the block with a R.I.P
Avatar
Odpovídá na Michal Žůrek - misaz
Libor Šimo (libcosenior):8.2.2014 20:32

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ť!

Nahoru Odpovědět
8.2.2014 20:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Hartinger:8.2.2014 20:34

Tak samozřejmě, když je pojmenovaná česky :P Ale on jí tam má a pak ji volá, takže nevidím problém.

Nahoru Odpovědět
8.2.2014 20:34
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Hartinger:8.2.2014 20:35

Ne, v zadání je, které mají číslici 0. Takže třeba 10, 105 atd. Ty kontroluješ něco jiného.

Nahoru Odpovědět
8.2.2014 20:35
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Libor Šimo (libcosenior):8.2.2014 20:46

Sorry, špatne som si pozrel jeho kód.

Nahoru Odpovědět
8.2.2014 20:46
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):8.2.2014 20:49

Bože, asi som už unavený.
Je to ako písal sdraco, treba to previesť na znaky a tak nájsť '0' v číslach.

Nahoru Odpovědět
8.2.2014 20:49
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:8.2.2014 21:00

Děkuju za rady! Vypadá to že to asi dáte do kupy jste fakt borci! Děkuju,já bych to nedal :))

 
Nahoru Odpovědět
8.2.2014 21:00
Avatar
Odpovídá na
Libor Šimo (libcosenior):9.2.2014 8:29

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;
}
Nahoru Odpovědět
9.2.2014 8:29
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 9:11

Teď to už sice vypíše ty prvočísla s nulou ale ostatní ne...Ale děkuju že mi s tim úkolem pomáháte :)

 
Nahoru Odpovědět
9.2.2014 9:11
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:9.2.2014 9:25

No ale to má ten program podle tvého zadání dělat :D

Nahoru Odpovědět
9.2.2014 9:25
New kid back on the block with a R.I.P
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 9:27

:D No jo máte pravdu :D A nevíte jak tam tedy hodit ještě aby mi to vypsalo jejich součet kolik jich to vypsalo? :)

 
Nahoru Odpovědět
9.2.2014 9:27
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Honza Bittner:9.2.2014 9:39

Nebylo by lepší kontrolovat přítomnost 0 v číslu pomocí regulárního výrazu? :P

Nahoru Odpovědět
9.2.2014 9:39
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na
Libor Šimo (libcosenior):9.2.2014 9:52

Rozhodni sa čo vlastne chceš. Súčet vypísaných čísiel alebo ich počet.

Nahoru Odpovědět
9.2.2014 9:52
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):9.2.2014 9:53

Neviem, neskúšal som to.

Nahoru Odpovědět
9.2.2014 9:53
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 9:55

Omlouvám se, je tam spočítá všechna prvočísla v rozsahu (a,b),takže počet vypsaných prvočísel. Děkuju

 
Nahoru Odpovědět
9.2.2014 9:55
Avatar
petrph
Člen
Avatar
Odpovídá na Honza Bittner
petrph:9.2.2014 9:59

To je zbytečně složitý, stačí jen zjistit zda tam je nebo není přes funkci strchr

 
Nahoru Odpovědět
9.2.2014 9:59
Avatar
petrph
Člen
Avatar
petrph:9.2.2014 10:13

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;
    }
 
Nahoru Odpovědět
9.2.2014 10:13
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 10:20

Tohle vypadá taky dobře :) Ale háže to jenom mě chybu u toho strchr?

 
Nahoru Odpovědět
9.2.2014 10:20
Avatar
vitamin
Člen
Avatar
vitamin:9.2.2014 10:49

Na zistenie ci cislo obsahuje nulu by malo stacit nieco taketo:

int maNulu(unsigned num){
        while(num >= 10){
                if(num % 10 == 0)return 1;
                num /= 10;
        }
        return !num;
}
 
Nahoru Odpovědět
9.2.2014 10:49
Avatar
Odpovídá na vitamin
Libor Šimo (libcosenior):9.2.2014 11:21

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;
}
Nahoru Odpovědět
9.2.2014 11:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 11:45

A nevíte tedy jak tam mám vložit aby mi to napsalo kolik prvočísel to vypsalo? :) Díky

 
Nahoru Odpovědět
9.2.2014 11:45
Avatar
Libor Šimo (libcosenior):9.2.2014 12:01

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;
}
Editováno 9.2.2014 12:02
Nahoru Odpovědět
9.2.2014 12:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 12:21

Nějak mi to stále nefunguje :D protože když zadám že chci čísla od 5 do 555 tak mi to napíše že počet vypsaných prvočísel je 42066050.

 
Nahoru Odpovědět
9.2.2014 12:21
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Honza Bittner:9.2.2014 12:23

Změň ještě tu funkci prvocislo() tak aby vracela 1 nebo 0.

Nahoru Odpovědět
9.2.2014 12:23
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Libor Šimo (libcosenior):9.2.2014 12:27

Mne to funguje správne.

Nahoru Odpovědět
9.2.2014 12:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 12:29

Aha,tak to je divný. A jaký tam máte připojený knihovny?...Třeba to bude tim...i když nevim tedy čim by to mohlo být.

 
Nahoru Odpovědět
9.2.2014 12:29
Avatar
Libor Šimo (libcosenior):9.2.2014 12:32

stdio.h, math.h a string.h

Nahoru Odpovědět
9.2.2014 12:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):9.2.2014 12:34

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.

Nahoru Odpovědět
9.2.2014 12:34
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):9.2.2014 12:34

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.

Nahoru Odpovědět
9.2.2014 12:34
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr
Neregistrovaný
Avatar
Petr:9.2.2014 13:57

Děkuju vám moc! Už to funguje!

 
Nahoru Odpovědět
9.2.2014 13:57
Avatar
petrph
Člen
Avatar
petrph:9.2.2014 14:12

Aha ,teď jsem se díval proč možná někomu nechodí ta funkce strchr.
Zkuste jí dát do závorky

if (strchr(c,'0'))

Přitom ale v překladači skutečně jazyka C to projde i bez závorky, ta chyba se hlásí až při použití překladače C++.

 
Nahoru Odpovědět
9.2.2014 14:12
Avatar
vitamin
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
vitamin:9.2.2014 15:45

Co na tom nefunguje?

 
Nahoru Odpovědět
9.2.2014 15:45
Avatar
Nahoru Odpovědět
9.2.2014 15:48
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
vitamin
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
vitamin:9.2.2014 16:26

Co je na nom zle?

 
Nahoru Odpovědět
9.2.2014 16:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 52.