[C] Program do znajdywania liczby podzielnej przez 5

AndrzejMath_h
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 22 gru 2013, o 01:15
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy

[C] Program do znajdywania liczby podzielnej przez 5

Post autor: AndrzejMath_h »

Mam do napisania program do znajdywania najmniejszej liczby podzielnej przez 5 w języku C.Mam program,który znajduję najmniejszą liczbę,jak go zmodyfikować,aby znajdywał najmniejszą liczbę podzielną przez 5.Probówałem różnych kombinacji z operatorem modulo,ale mi to nie wychodzi.Proszę o pomoc.Wklejam swój kod:

Kod: Zaznacz cały

#include <stdio.h>
#include<stdlib.h>
 
#define N 1000
int main(void)

{
	int index;
	int tab[N]={};
	int  i,ile;
	char exit;
	int min;
	do
	{
		index=0;
		min=0;
		int mod;

    printf("Podaj ilosc liczb \n");
    scanf("%d", &ile);
	if(ile>0)
	{
    printf("Podaj liczby \n");
		
	for(int i=1;i<=ile;i++)
	{
		scanf("%d",&tab[i]);	
	 min=tab[0];
	 tab[index]=tab[i];
	  index++;
	
				  for(int j=1;j<index;j++)
				  {
					if(tab[j] < min) 
					 min = tab[j];   
				  }
			 
	} 
	}
	  	
	printf("Najmniejsza liczba to: % d\n",min);	 
	
	printf("Czy chcesz kontynuowac?(T/N)\n");
	exit=getchar();
	scanf("%c",&exit);
	}
	

		
	while(exit=='T'||exit=='t');
	
	
}
Ostatnio zmieniony 16 lut 2014, o 10:38 przez Afish, łącznie zmieniany 2 razy.
Powód: Dodanie tagu.
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C] Program do znajdywania liczby podzielnej przez 5

Post autor: Andreas »

Kod: Zaznacz cały

if (tab[j]%5==0)
AndrzejMath_h
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 22 gru 2013, o 01:15
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy

[C] Program do znajdywania liczby podzielnej przez 5

Post autor: AndrzejMath_h »

Mi to właśnie nie działa,mógłbyś mi powiedzieć gdzie mam to wstawić?Kurde tyle już robiłem kombinacji i mi to nie działa tzn.czasem działa,ale to nie jest to np.wpisze sobie 3 liczby 4,5,7 to najmniejsza wyskakuje 4,a 4 przeciez nie jest podzielne przez 5.

Kod: Zaznacz cały

#include <stdio.h>
#include<stdlib.h>
 
#define N 1000
int main(void)

{
	int index;
	int tab[N]={};
	int  i,ile;
	char exit;
	int min;
	do
	{
		index=0;
		min=0;
		int mod;

    printf("Podaj ilosc liczb \n");
    scanf("%d", &ile);
	if(ile>0)
	{
    printf("Podaj liczby \n");
		
	for(int i=1;i<=ile;i++)
	{
		scanf("%d",&tab[i]);	
	 min=tab[0];
	 tab[index]=tab[i];
	  index++;
	
				  for(int j=1;j<index;j++)
				  {
					if(tab[j] < min) 
					{
						if(tab[j]%5==0)//<--Mi to nie działa
					 min = tab[j];   
					}
				  }
			 
	} 
	}
	  	
	printf("Najmniejsza liczba to: % d\n",min);	 
	
	printf("Czy chcesz kontynuowac?(T/N)\n");
	exit=getchar();
	scanf("%c",&exit);
	}
	

		
	while(exit=='T'||exit=='t');
	
	
}

Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C] Program do znajdywania liczby podzielnej przez 5

Post autor: Dasio11 »

1.

Kod: Zaznacz cały

int  i,ile;
Zmienna i jest później ponownie deklarowana, więc ta deklaracja będzie zasłonięta i jest niepotrzebna.

2.

Kod: Zaznacz cały

int mod;
Ta zmienna nie jest w ogóle użyta.

3.

Kod: Zaznacz cały

    for(int i=1;i<=ile;i++)
    {
        scanf("%d",&tab[i]);
        min=tab[0];
        tab[index]=tab[i];
        index++;

        for(int j=1;j<index;j++)
        {
            if(tab[j] < min)
            {
                if(tab[j]%5==0)//<--Mi to nie działa
                min = tab[j];
            }
        }
    }
Ten kawałek kodu ma niejasne przeznaczenie. W momencie wykonania instrukcji tab[index] = tab[i] zawsze jest index == i-1, a w momencie wykonania for(int j=1;j<index;j++) jest index == i. Twój kod można więc równoważnie zapisać tak:

Kod: Zaznacz cały

    for(int i=1;i<=ile;i++)
    {
        scanf("%d",&tab[i]);
        min=tab[0];
        tab[i-1]=tab[i];

        for(int j=1; j<i; j++)
        {
            if(tab[j] < min)
            {
                if(tab[j]%5==0)//<--Mi to nie działa
                min = tab[j];
            }
        }
    }
Czyli:
Dla i = 1, 2, ..., ile
- Wczytaj tab[i]
- Ustaw min = tab[0]
- Przepisz tab[i] do poprzedniego pola tablicy
- Jeśli wśród j = 1, 2, ..., i-1 znajdzie się takie, że tab[j] jest podzielne przez pięć oraz mniejsze od min, to ustaw min na najmniejszą z takich tab[j].
Uwagi:
- Przepisywanie wartości o jeden wstecz nie jest potrzebne.
- min jest inicjalizowane liczbą tab[0], która nie musi być podzielna przez pięć. W przypadku liczb 4, 5, 7, algorytm zwraca 4, bo najpierw ustawia min = 4 a potem nie znajduje liczby mniejszej niż 4.
- Nie trzeba po każdym wczytaniu sprawdzać, czy wśród dotąd wczytanych liczb nie ma lepszej. Wystarczy po wczytaniu wszystkich sprawdzić raz. Dla większych wartości ile takie rozwiązanie zabiera znacznie mniej czasu.

Proponuję taki poprawiony kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

#define N 1000
int main(void)
{
    int tab[N] = {};
    int ile;
    char exit;
    int min;
    do
    {
        printf( "Podaj ilosc liczb \n" );
        scanf( "%d", &ile );
        if( ile == 0 )
        {
            printf( "Wsrod zera liczb nie ma najmniejszej. \n" );
        }
        else
        {
            printf( "Podaj liczby \n" );

            // Wczytujemy wszystkie liczby naraz
            for( int i = 0; i < ile; ++i )
            {
                scanf( "%d", &tab[i] );
            }

            // Początkowo min = -1 aby zaznaczyć, że do tej pory nie napotkano
            // jeszcze żadnej liczby podzielnej przez 5.
            min = -1;

            for( int i = 0; i < ile; ++i )
            {
                // Warunek konieczny rozważania tab[i].
                if( tab[i]%5 == 0 )
                {
                    // Jeśli min == -1 (co oznacza, że tab[i] jest pierwszą napotkaną liczbą podzielną przez 5)
                    // lub jeśli tab[i] jest mniejsze od aktualnego min,
                    // to podstaw za min nową wartość.
                    if( min == -1 || tab[i] < min ) min = tab[i];
                }
            }

            if( min == -1 ) printf( "Wsrod podanych liczb nie ma podzielnej przez 5. \n" );
            else printf( "Najmniejsza liczba to: %d \n", min );
        }

        printf("Czy chcesz kontynuowac?(T/N)\n");
        exit = getchar();
        scanf( "%c", &exit );
    }
    while(exit=='T'||exit=='t');

    return 0;
}
AndrzejMath_h
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 22 gru 2013, o 01:15
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy

[C] Program do znajdywania liczby podzielnej przez 5

Post autor: AndrzejMath_h »

Dzięki wielkie : )
ODPOWIEDZ