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ý
Redaktor
Avatar
Odpovídá na Petr
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  +1 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
Redaktor
Avatar
Odpovídá na Petr
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
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/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 Petr
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  +1 8.2.2014 19:14
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Petr
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
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/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  -1 8.2.2014 19:43
Nesnáším {}, proto se jim vyhýbám.
Avatar
Honza Bittner
Redaktor
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  +6 8.2.2014 19:47
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Petr
David Čápka: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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka:8.2.2014 20:21

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

Nahoru Odpovědět 8.2.2014 20:21
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na David Čápka
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
David Čápka:8.2.2014 20:30

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

Nahoru Odpovědět  +1 8.2.2014 20:30
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka: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  +1 8.2.2014 20:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka: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  +1 8.2.2014 20:35
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):8.2.2014 20:46

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

Nahoru Odpovědět  +1 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 Petr
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Petr
David Čápka: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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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
Redaktor
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  -2 9.2.2014 9:39
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/ama.
Avatar
Odpovídá na Petr
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
Redaktor
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  +1 9.2.2014 12:23
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/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
Avatar
Libor Šimo (libcosenior):9.2.2014 17:08

Malo by to vypisat len cisla obsahujuce 0 a vypisuje sa tam vsetko ine, len to co sa ma, sa nevypisuje.

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

Sorry, vlastne mas pravdu, ja som si nyslel, ze to bude vypisovat konkretne cisla.
:[

Nahoru Odpovědět 9.2.2014 17:18
Aj tisícmíľová cesta musí začať jednoduchým krokom.
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 52 zpráv z 52.