Sprawdzenie i zapetlenie

0

Musze napisać program, który ma odczytywać sekwencję liczb całkowitych z terminala i wyliczać częstotliwość wystąpień przecięć zera we wczytywanym strumieniu wejściowym. Przecięcie zera następuje każdorazowo, gdy po wartości dodatniej następuje wartość ujemna lub po wartości ujemnej dodatnia (także, gdy między tymi wartościami pojawia się jedno lub więcej zer). W przypadku wykroczenia wyliczanej częstotliwości poza zadany przedział na wyjściu programu powinien pojawić się odpowiedni komunikat. W szczególności:

* pod uwagę mają być brane jedynie liczby z przedziału od -10 do 10 oraz liczba 99 oznaczająca koniec strumienia danych; pozostałe wartości są uznawane za niepoprawne i pomijane;
* częstotliwość ma być określana jako liczba wystąpień przecięcia zera w kolejnych grupach złożonych z 99 liczb - wartość częstotliwości spoza przedziału od 5 do 8 uznawana jest za niepoprawną i powoduje pojawienie się na wyjściu programu odpowiedniego komunikatu; w pozostałych przypadkach nie jest generowany żaden komunikat.

Przedstawiam schemat blokowy,mysle ze jest dobry bo kolega zniego korzystal i udalo musiezrobic.
user image
kod programu:

#include <stdio.h>
#include <math.h>
#define MAX_LICZB 99
int main() 
{
int a,b,liczby,ile,iloczyn;
	a=0;
	liczby=0;	/*ilosc liczb */
	ile=0; 		/*ilosc przeciec zera */
		

printf("Program ten wylicza ilosc przeciec zera z podanego ciagu cyfr.\n\n");
while(b!=99)
  {

	if (liczby=MAX_LICZB)
		{	
		if (ile>=5 && ile<=8)
			printf("Wystoapilo %d,", ile "przeciec zera"
		else	
			printf("NIestety ilosc przeskokow nie miesci sie w przedziale od 5 do 8");
		
	a=0;
	liczby=0;
	ile=0;
		}
		printf("Wprowadz teraz pierwsza cyfre\n");
		scanf("%f",&b); 
		if (b<=10 && b>=10)
		{
			if (b==0)
			liczba++;
			else
			{
			liczba++;
			iloczyn=a*b;
				if (iloczyn=0)
				b=a;
				else
				{
				if (iloczyn<0)
					ile++;
					b=a;
				else
					b=a;
				}
			}
		}
		else		
							{	
							if (a=99)
							if (ile!=0)
							printf("Wystoapilo %d,", ile "przeciec zera")
							else
							printf("Wprowadzona przez Ciebie liczba nie miesci sie w przedziale <-10;10> ani ni jest liczba 99");
							
							}
}
0

Automatyka i Robotyka, Wydział Elektroniczny Politechniki Wrocławskiej.

Chciałeś się pochwalić, dajesz do sprawdzenia, czy coś nie działa? Bo jakoś nie widzę pytania w Twoim poście.

0

tak prosilbym o sprawdzenie

0

Najpierw doprowadź program do stanu, w którym się kompiluje.
Po każdym wywołaniu funkcji, np. printf daj średnik.
Tak nie korzysta się z printf:
printf("Wystoapilo %d,", ile "przeciec zera")
Jeśli w bloku if lub else ma być więcej niż jedna instrukcja musisz dać je w nawiasy klamrowe.
Jedyną liczbą, która spełnia ten warunek:
if (b<=10 && b>=10)
jest 10.
Informację o tym, ile przecięć nastąpiło dałbym na końcu programu, poza pętlą while.

Pani Kasia nie byłaby zadowolona :(

0
#include <stdio.h>
#include <math.h>
#define MAX_LICZB 5
int main() 
{
int a,b,liczby,ile,iloczyn;
	a=0;
	liczby=0;	/*ilosc liczb */
	ile=0; 		/*ilosc przeciec zera */
		

printf("Program ten wylicza ilosc przeciec zera z podanego ciagu cyfr.\n\n");
while(b!=99)
  {

	if (liczby=MAX_LICZB)
		{	
		if (ile>=5 && ile<=8)
             printf("Wystoapilo %d przeciec zera",ile);
		else	
			printf("NIestety ilosc przeskokow nie miesci sie w przedziale od 5 do 8.\n");
		
	a=0;
	liczby=0;
	ile=0;
		}
		printf("Wprowadz teraz pierwsza cyfre\n");
		scanf("%f",&b); 
        if ((b>=-10) &&( b<=10))
		{
			if (b==0)
			liczby++;
			else
			{
			liczby++;
			iloczyn=a*b;
				if (iloczyn=0)
				b=a;
				else
				{
				if (iloczyn<0)
                    {
					ile++;
					b=a;
                    }
				else
					b=a;
				}
			}
		}
		else		
							{	
							if (a=99)
							if (ile!=0)
                            printf("Wystoapilo %d przeciec zera",ile);
							else
							printf("Wprowadzona przez Ciebie liczba nie miesci sie w przedziale <-10;10> ani ni jest liczba 99.\n");
							
							}
}
}

teraz tez dziala nieporpawnie, wprowadzajc np1 pokazuje ze liczba nie nalezydo przedzialo <-10;10>

0

Ograniczę się do wytknięcia podstawowych i rażących błędów...

#include <stdio.h>
#include <math.h>
#define MAX_LICZB 5

int main()
{
  int a,b,liczby,ile,iloczyn;
  a=0;
  liczby=0;        /*ilosc liczb */
  ile=0;                 /*ilosc przeciec zera */
  printf("Program ten wylicza ilosc przeciec zera z podanego ciagu cyfr.\n\n");
  while (b!=99)
    {
      if (liczby=MAX_LICZB) // ! ...
        {
          if (ile>=5 && ile<=8)
            printf("Wystoapilo %d przeciec zera",ile);
          else
            printf("NIestety ilosc przeskokow nie miesci sie w przedziale od 5 do 8.\n");
          a=0;
          liczby=0;
          ile=0;
        }
      printf("Wprowadz teraz pierwsza cyfre\n");
      scanf("%f",&b); //a b to nie był czasem int a nie float?...
      if ((b>=-10) &&( b<=10))
        {
          if (b==0)
            liczby++;
          else
            {
              liczby++;
              iloczyn=a*b;
              if (iloczyn=0) // !...
                b=a;
              else
                {
                  if (iloczyn<0)
                    {
                      ile++;
                      b=a;
                    }
                  else
                    b=a;
                }
            }
        }
      else
        {
          if (a=99) //! 3 raz, ty w ogóle wiesz jak wygląda operator porównania?
            if (ile!=0)
              printf("Wystoapilo %d przeciec zera",ile);
            else
              printf("Wprowadzona przez Ciebie liczba nie miesci sie w przedziale <-10;10> ani ni jest liczba 99.\n");
        }
    }
}

Wynika z tego kodu ze nie masz pojęcia jak porównywać a jak przypisywać.
Wynika też że nie wiesz jak należy pisać "Wystąpiło" -> "Wystapilo" (a nie "Wystoapilo" jak zwykłeś pisać...)

0

Sory za te bledy fakt sa glupie, poprawilem je ale program dalej cos niedziala prawidlowo...

#include <stdio.h>
#include <math.h>
#define MAX_LICZB 99
int main() 
{
int a,b,liczby,ile,iloczyn;
	a=0;
	liczby=0;	/*ilosc liczb */
	ile=0; 		/*ilosc przeciec zera */
		

printf("Program ten wylicza ilosc przeciec zera z podanego ciagu cyfr.\n\n");
while(b!=99)
  {

	if (liczby=MAX_LICZB)
		{	
		if (ile>=5 && ile<=8)
             printf("Wystąpiło %d przeciec zera",ile);
		else	
			printf("NIestety ilosc przeskokow nie miesci sie w przedziale od 5 do 8.\n");
		
	a=0;
	liczby=0;
	ile=0;
		}
		printf("Wprowadz teraz cyfre\n");
		scanf("%d",&b); 
        if ((b>=-10) &&( b<=10))
		{
			if (b==0)
			liczby++;
			else
			{
			liczby++;
			iloczyn=a*b;
				if (iloczyn==0)
				b=a;
				else
				{
				if (iloczyn<0)
                    {
					ile++;
					b=a;
                    }
				else
					b=a;
				}
			}
		}
		else		
							{	
							if (b==99)
							if (ile!=0)
                            printf("Wystoapilo %d przeciec zera",ile);
							else
							printf("Wprowadzona przez Ciebie liczba nie miesci sie w przedziale <-10;10> ani ni jest liczba 99.\n");
							
							}
}
}
0

Jesli poprawnie sformatujesz ten kod to moze ktos pomoze bo w takiej postaci to nie wiem...
Chyba nie wiesz jak wyglada ladnie napisany kod. Walisz w jednej linijce 5 tabulatorow a w nastepnej 10 i nijak nie idzie tego rozczytac.... O_o

if (liczby=MAX_LICZB)

No i znowu, ile mozna, == operator porownania, = operator przypisania to nie to samo! O_o

if (b==99)
  if (ile!=0)
  //...
  else
    // printf ... 

Tutaj tez cos jest spierdzielone doslownie albo wczesniej bo a ==0 wiec 0*b == 0 co za tym idzie zmienna ile nigdy nie zostanie inkrementowana i zawsze skoczy do bloku else....

0

Algorytm ma wyglądać tak:

  1. DOPÓKI wprowadzona liczba nie jest równa 99 i zostało wprowadzone mniej niż 30 liczb;
  2. spytaj użytkownika o liczbę;
  3. jeśli liczba jest spoza zakresu -10 do 10 to poinformuj o błędzie;
  4. jeśli liczba jest dobra, to:
    4.1) zwiększ licznik wprowadzonych liczb;
    4.2) jeśli liczba jest równa 0, to zwiększ także licznik przecięć zera;
    4.3) jeśli nie, to:
    4.3.1) jeśli iloczyn wprowadzonej liczby i poprzedniej jest mniejszy od zera zwiększ licznik częstotliwości
    4.3.2) zapamiętaj wpisaną liczbę (a = b).
  5. Po skończonej pętli wyświetl komunikat końcowy w zależności od tego, czy liczba przecięć mieści się w żądanym zakresie.

To chyba wszystko.

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