Jak przerobić jednolity kod na funkcje+odwołania

0

Siemka,
muszę napisać program, który nie wychodził mi jako funkcje+odwołania do nich, więc napisałem jako jednolity kod.
Jednak nie daje mi to spokoju bo wiem, że prędzej czy później będę musiał tak pisać. Mógłby mi ktoś na tym przykładzie pokazać jak to powinno wyglądać? Bardzo proszę :)

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

void menu(void)
{
printf("\n\t\t\t\tMENU\n\nWitaj, co chcesz zrobic?\n\n[1]Wypelnij tablice\n[2]Wyswietl elementy tablicy na ekranie\n[3]Sprawdz czy zawartosc tablicy jest posortowana rosnaco\n[4]Sprawdz czy zawartosc tablicy jest posortowana malejaco\n[5]Sprawdz czy ktores elementy tablicy sie powtarzaja.\n[6]Sprawdz ile razy powtarza sie wybrana liczba.\nNacisnij ESC, aby zakonczyc.\n");
}

void main (void)
{ 
int tab[10]={0};
int i;
int t1=0;
int t2=1;
int s1;
int s2=0;
int s3=0;
menu();
while(1)
{	int p;
p=_getch();
switch(p)
	{
case 27:
	return;
case 13:
	system ("cls");
	menu();
	break;
case '1':
	system ("cls");
	for(i=0; i<10; i++)
		{
		printf("Wprowadz element nr %d = ", i+1);
		scanf("%d", &tab[i]);
		}
	system ("cls");
	menu();
	break;
case '2':
	system ("cls");
			for(i=0; i<10; i++)
				 printf("Element nr %d = %d\n", i+1, tab[i]);
	break;
case '3':
	system ("cls");
	if(tab[0]<=tab[1]&&tab[1]<=tab[2]&&tab[2]<=tab[3]&&tab[3]<=tab[4]&&tab[4]<=tab[5]&&tab[5]<=tab[6]&&tab[6]<=tab[7]&&tab[7]<=tab[8]&&tab[8]<=tab[9])
		printf("Elementy sa posortowane rosnaco");
	else
		printf("Niestety, nie tym razem...");
	break;
case '4':
	system ("cls");
	if(tab[0]>=tab[1]&&tab[1]>=tab[2]&&tab[2]>=tab[3]&&tab[3]>=tab[4]&&tab[4]>=tab[5]&&tab[5]>=tab[6]&&tab[6]>=tab[7]&&tab[7]>=tab[8]&&tab[8]>=tab[9])
		printf("Elementy sa posortowane malejaco");
	else
		printf("Niestety, nie tym razem...");
	break;

case '5':
	system ("cls");
	for(int t1=0;t1<9;t1++)
    {
	for(int t2=t1+1;t2<10;t2++)
        {
            if(tab[t1]==tab[t2])
            {	
				printf("%d i %d element tablicy to %d\n",t1,t2,tab[t1]);
				s3++;
			}
        }
    }
	printf("Laczna liczba powtorzen: %d",s3);
	s3=0;
	break;
case '6':
	system ("cls");
	scanf("%d",&s1);
	for(int s=0;s<10;s++)
		if(tab[s]==s1)
			s2++;
	printf("Wybrana liczba pojawia sie: %d razy",s2);
	s2=0;
	break;
}

}
_getch();
}
 
0

Twoim problemem nie są funkcje, tylko myślenie. Co to jest:

       if(tab[0]<=tab[1]&&tab[1]<=tab[2]&&tab[2]<=tab[3]&&tab[3]<=tab[4]&&tab[4]<=tab[5]&&tab[5]<=tab[6]&&tab[6]<=tab[7]&&tab[7]<=tab[8]&&tab[8]<=tab[9])

? o_O
A jakbyś miał 100 liczb w tablicy też byś tak zrobił? Umiesz sprawdzić ten sam warunek za pomocą pętli?
A jeśli chcesz to koniecznie wstawic procedury/funkcje to przenieś pewne fragmenty do funkcji po prostu. Domyślam się ze problem mialeś z tym ze nie doczytałeś o tym jak przekazywać do funkcji argumenty i jak zwracać z nich wartości...
Przykład:

int zliczWystapienia(int* tab, int rozmiar, int liczba){
  int wystapienia = 0;
  for(int i=0;i<rozmiar;i++)
    if(tab[i]==liczba)
      wystapienia++;
  return wystapienia;
}

I dzięki temu case 6 może wyglądać tak:

case '6':
        system ("cls");
        scanf("%d",&s1);
        printf("Wybrana liczba pojawia sie: %d razy",iloscWystapien(tab,10,s1));
        break;
0

Dzięki wielkie, myślałem nad pętlą, ale o 7 rano to myślałem już tylko o spaniu, więc napisałem tak byle działało. A co do argumentów, byłem tak blisko, że chyba nigdy bym nie doszedł do tego gdzie robiłem błąd, więc dzięki wielkie. Teraz już wszystko rozumiem ;)

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