czy liczba zawiera się w przedziale i równocześnie jest podzielna przez 6

0

Dziękuję wszystkim za pomoc kolokwium zdane napisałam jeden na trzy programy przez to że w poleceniu jednego nie doczytałam, że program ma być odporny na dzielenie przez zero potem już nie na ocenę napisałam to w trzy minuty więc umiałam dwa na trzy programy. Ktoś mógłby zerknąć na ten kod programu z wczorajszego kolokwium i wskazać błędy? Trzeci przykład którego nie zrobiłam. Napisz program wczytujący liczbę całkowitą oraz sprawdzający czy mieści się w przedziale <-12,42) i czy jednocześnie jest podzielna przez 6 wyświetl odpowiednią informacje warunek Mój kod: Nie wyświtla drugi warunek spełniony

#include <stdio.h>
main()
{
    int liczba;
    printf("podaj liczbe calkowita");
    scanf("%d", &liczba);
    if (liczba >= -12 && liczba < 42) {
        printf("warunek 1 spelniony");
    }
    else {
        printf("warunek 1 niespelniony");

        if (liczba /6 == 0) {
            printf("warunek 2 spelniony");
        }
        else {
            printf("warunek 2 niepelniony");
        }
    }
}

drugie pytanie nie można tak

if(liczba>=-12&&liczba<42&&liczba/6==0)
0

Powinnaś użyć modulo zamiast dzielić przez 6 i sprawdzać czy wynik wyjdzie 0

0

modulo czyli?

3
if(liczba>=-12&&liczba<42&&liczba/6==0)

mozna tak, ale nie uzywasz poprawnego operatora. Zreszta, to jest tak mega nieczytelne ze az oczy bola

bool jestWiekszaNizMinimalna = liczba >= -12;
bool jestMniejszaNizMaksymalna = liczba < 42;
bool jestPodzielnaPrzezSzesc = liczba % 6 == 0; // tutaj powinnas uzyc modulo nie dzielenia
if (jestWiekszaNizMinimalna  && jestMniejszaNizMaksymalna && jestPodzielnaPrzezSzesc) {}

nazwy polskie, jako ze pisalem na podstawie Twojego kodu. Sam uzywalbym angielskich nazw

powiedz mi, ktore jest bardziej czytelne. Twoj jednolinijkowiec czy moje czterylinijki?

0

gdzie brakuje mi nawiasów?

3
fasadin napisał(a):

powiedz mi, ktore jest bardziej czytelne. Twoj jednolinijkowiec czy moje czterylinijki?

Ja bym powiedział że czytelniejszy jest jednolinijkowiec z odstępami:

if (liczba >= -12 && liczba < 42 && liczba % 6 == 0)

A może nawet z dodatkowymi nawiasami:

if ((liczba >= -12) && (liczba < 42) && (liczba % 6 == 0))
0

Teraz mam coś takiego i dalej nie pisze warunek drugi spełniony

#include <stdio.h>
main()
{
	int liczba;
	printf("podaj liczbe calkowita");
	scanf("%d",&liczba);
	if(liczba>=-12&&liczba<42)
	{
		printf("warunek 1 spelniony");}
		else
		{
			printf("warunek 1 niespelniony");
			
			if(liczba % 6==0)
			{
				printf("warunek 2 spelniony");}
				else
				{
					printf("warunek 2 niepelniony");
				}
			
		}
	}
0

A jaką liczbę wczytujesz?

0

szóstkę i próbowałam 12

1

No to pierwszy warunek w którym sprawdzasz czy liczba jest w przedziale -12, 42 się spełnia, więc nie wykonuje się else w którym sprawdzasz czy jest podzielny przez 6. Wyrzuć tego ifa sprawdzającego podzielność poza blok else.
Liczba 48 powinna ci pokazać warunek 2 bo warunku 1. nie spełnia

0

Dziękuję

0
#include <stdio.h>
main()
{
	int liczba;
	printf("podaj liczbe calkowita");
	scanf("%d",&liczba);
if (liczba >= -12 && liczba < 42 && liczba % 6 == 0)
	
		printf("warunek 1 spelniony");
		else
		printf("warunek 1 niespelniony");
			
			
0

Dzięki

0

Oczywiście że nie — w końcu wypisywanie warunek 2 spelniony jest wewnątrz else’a do zewnętrznego ifa, tzn. wejdzie w jego okolice tylko wtedy, kiedy zewnętrzny warunek, tj. liczba>=-12&&liczba<42 nie będzie spełniony.

Ty nie chcesz tutaj zagnieżdżonych instrukcji warunkowych (jak masz teraz), tylko jedną po drugiej.

1
#include <stdio.h>

typedef int Condition(int x);
int conditionA(int x) { return (-12<=x)&&(x<42); }
int conditionB(int x) { return !(x%6); }
Condition *Cond[]={ &conditionA,&conditionB };
const char *NY[]={" NIE",""};

int main()
{
    int i,value;
    while((printf("podaj liczbe calkowita: "))&&(scanf("%d",&value)==1))
    {
    	for(i=0;i<sizeof(Cond)/sizeof(*Cond);++i)
    	{
            printf("Warunek %d%s spelniony\n",i+1,NY[Cond[i](value)]);
    	}
    }    
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1