Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Potrzebna pomoc w realizacji programu

Ostatnio zmodyfikowano 2010-11-07 14:30
Autor Wiadomość
pallaw
Temat założony przez niniejszego użytkownika
Potrzebna pomoc w realizacji programu
» 2010-11-06 22:02:35
Potrzebuje pomocy. Z taki programikiem ...
który szuka liczb w zakresie od 1 do 1000, które są podzielne przez sumę swoich cyfr. Nie liczę na gotowca tylko na nakierowanie toku myślenia co z tym zrobić by miało ręce i nogi ;) Z góry dziękuję za pomoc ;)

oto co udało mi sie napisać..

KOD:

#include <iostream.h>

int main()
{
    int a[10]={0,1,2,3,4,5,6,7,8,9};// tablica 10 elementowa
    int b[10]={0,1,2,3,4,5,6,7,8,9};
    int c[10]={0,1,2,3,4,5,6,7,8,9};
   
    int d,x,wynik;
 
    x=a*100+b*10+c; // program ma podstawić wszystkie liczby z tablicy po okleji np.001
   
    d=a+b+c; // ma dodac liczby które wczesniej sobie pobrał z tablicy czyli 0+0+1
   
    x%d=wynik; // ma przypisać resztę z dzielenia mod i jeżeli liczba dzieli się bez reszty ma ja wipisać jeżeli liczba daje resztę ma ja ominąć
   
    wynik=0 then cout<<x ;
  
    // ta tyle na ile wpadałam..
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
P-23623
F90M
» 2010-11-06 22:29:42
Nie potrzebujesz żadnych tablic, wystarczy ci tylko jedna zmienna (licznik w pętli for).

Dodam jeszcze że w tym wypadku musisz wyłuskać 2 ostatnie cyfry, 100 i tak spełni warunek chociaż jeśli mus to możesz sprawdzać 3 cyfry. Aby sprawdzić ostatnią cyfrę chyba wiesz przez jaką liczbę musisz wykonać dzielenie modulo. Co do 2 od końca cyfry, pomyśl co możesz zrobić z liczbą którą sprawdzasz i ostatnią cyfrą (którą otrzymałeś przez wcześniejsze obliczenie).
P-23626
ison
» 2010-11-06 22:39:50
@pallaw powtórz sobie podstawy programowania bo masz tam sporo błędów

gotowiec jakby kto chciał:
C/C++
#include <cstdio>
#include <string>

int main()
{
    for( int i = 1; i <= 1000; ++i ) {
        char * buff;
        int temp = 0;
        itoa( i, buff, 11 );
        for( int j = 0; j < strlen( buff ); ++j ) {
            temp += buff[ j ] - 48;
        }
        if( !( i % temp ) ) printf( "%d\n", i );
       
        delete[] buff;
    }
}
jeśli pracujesz na windowsie i chcesz zobaczyć wynik to dopisz tuż przed końcem while(1) (lub system("pause")) aby zatrzymać program
P-23628
F90M
» 2010-11-06 22:58:13
ison z armatą na komara?
P-23629
ison
» 2010-11-07 00:40:17
@F90M hmmm? dlaczego? jest prostsze rozwiązanie?
P-23636
F90M
» 2010-11-07 08:26:36
Oczywiście, chociażby coś takiego:
C/C++
#include <iostream>
int main()
{
    int iWynik, iTemp;
    for( int iLiczba = 1; iLiczba <= 1000; ++iLiczba )
    {
        iTemp = iLiczba;
        while( iTemp )
        {
            iWynik += iTemp % 10;
            iTemp /= 10;
        }
        if( !( iLiczba % iWynik ) ) std::cout << iLiczba << "\n";
       
        iWynik = 0;
    }
}
Nie potrzeba dołączać żadnych dodatkowych bibliotek i funkcji.

Można to też zrobić używając jednej zmiennej (niezbyt elegancko, ale można :) dla małej liczby obiegów)
C/C++
#include <iostream>
int main()
{
    for( int n = 1; n <= 1000; ++n )
    if( !( n %( n % 10 +( n / 10 ) % 10 +( n / 100 ) % 10 +( n / 1000 ) % 10 ) ) )
         std::cout << n << "\n";
   
}
choć pierwszy kod jest zdecydowanie bardziej elastyczny, przejrzysty.
P-23637
pallaw
Temat założony przez niniejszego użytkownika
dzięki
» 2010-11-07 12:01:09
Więc tak chcę dodać, że nie jestem świetna z programowania bo miałam dopiero 4 ćwiczenia (w C) a na wykładach jesteśmy na budowie pętli (w turbo Pascalu) więc nie za bardzo idzie nam teoria z ćwiczeniami..Dlatego mam duże braki jeszcze..
Dlatego ison weź się nie czepiaj..:P -->nowicjusz jestem :)
 Hmm a co do programu F90M mam pytania.. dobra rozumiem program leci sobie po pętli for i bierze wszystkie liczby z zakresu od 1 do 1000. Następnie dana liczba jest przypisywana innej zmiennej która wrzucamy do pętli while w warunku mamy nasza liczbe.. 
   
iWynik += iTemp % 10;
 iTemp /= 10;

gdybyś mógł mi to wyjaśnić co robią te linijki była bym wdzięczna..
P-23644
ison
» 2010-11-07 13:01:48
@up liczba przy dzieleniu modulo (%) przez 10 zawsze da w wyniku ostatnią cyfrę liczby

zatem aby zsumować cyfry liczby 567 należy wykonać następujące operacje:
567 modulo 10 = 7 (ostatnia cyfra - dodajemy ją do wyniku)
567 / 10 = 56 (obcinamy ostatnią cyfrę przez podzielenie liczby przez 10)
56 modulo 10 = 6 (ostatnia cyfra - dodajemy ją do wyniku)
56 / 10 = 5 (obcinamy ostatnią cyfrę)
5 modulo 10 = 5 (ostatnia cyfra - dodajemy ją do wyniku)
5 / 10 = 0 (kończymy pracę, dodaliśmy wszystkie cyfry)

tym sposobem otrzymaliśmy sumę cyfr liczby 567


iWynik += iTemp % 10; to dodawanie do zmiennej iWynik ostatniej cyfry liczby iTemp;
powyższy zapis jest równoznaczny z zapisem iWynik = iWynik + iTemp % 10;
iTemp /= 10; to dzielenie liczby iTemp przez 10 (czyli obcinanie ostatniej cyfry)
powyższy zapis jest równoznaczny z zapisem iTemp = iTemp / 10;

F90M w pętli while cały czas dodawał ostatnią ostatnią cyfrę i potem ją obcinał tak długo aż liczba, z której bierze cyfry będzie równa 0
zapis
while( iTemp )
 jest równoznaczny z zapisem
while( iTemp != 0 )
 czyli pętla będzie wykonywana dopóki zmienna iTemp będzie różna od 0
P-23646
« 1 » 2
  Strona 1 z 2 Następna strona