Witam grono forumowiczów.
Ogólnie jestem świeżak w te klocki i tak dalej. Ale na laborkach (student, pierwszy rok informatyki) dostaliśmy za zadanie napisać program, który obejmie 3 rodzaje sortowań - bąbelkowe, poprzez wstawianie i wybieranie. No i wszystko było ładnie, pięknie działało, póki "menu" wyboru metody było zawarte w mainie, jednakowoż postanowiłem utrudnić sobie życie, i to zmodyfikować - by poprzez wybranie złej opcji program wyświetlał błąd i funkcja odwoływała się sama do siebie (w defaulcie). Po tej zmianie, sortowanie bąbelwe przestało mi działać poprawnie, a ja zbaraniałem próbując znaleźć błąd, zwłaszcza że w funkcji bubblesorta nic nie zmieniałem. Proszę o pomoc, na czym polega mój błąd. Oto kod:
#include <stdio.h>
#include <stdlib.h>
void dane(int a, int tablica[]);
void druk(int a, int tablica[]);
void babelek(int a, int tablica[]);
void wstaw(int a, int tablica[]);
void wybieranie(int a, int tablica[]);
void podmiana(int* xp, int* yp);
void menu(int a, int tablica[]);
int main()
{
int n;
printf("Podaj ilosc elementow: \n");
scanf("%d", &n);
int tab[n];
printf("Podaj dane do sortowania \n");
dane(n, tab);
printf("Wprowadzona tablica: \n");
druk(n, tab);
printf("\n\n");
menu(n, tab);
}
dane(int a, int tablica[])
{
for (int i = 0; i < a; i++) {
printf("Liczba nr %d \t", i + 1);
scanf("%d", &tablica[i]);
}
}
druk(int a, int tablica[])
{
for (int i = 0; i < a; i++) {
printf("Element tablicy nr %d to: \t", i + 1);
printf("%d \n", tablica[i]);
}
printf("\n");
}
babelek(int a, int tablica[])
{
int pom, zast;
zast = a;
while (a > 1) {
for (int i = 0; i < a - 1; i++) {
pom = tablica[i];
tablica[i] = tablica[i + 1];
if (tablica[i] > tablica[i + 1]) {
tablica[i + 1] = pom;
}
}
a--;
}
a = zast;
printf("\n\n");
druk(a, tablica);
}
wstaw(int a, int tablica[])
{
int x, j, i;
for (j = a - 2; j >= 0; j--) {
x = tablica[j];
i = j + 1;
while ((i < a) && (x > tablica[i])) {
tablica[i - 1] = tablica[i];
i++;
}
tablica[i - 1] = x;
}
printf("\n\n");
druk(a, tablica);
}
wybieranie(int a, int tablica[])
{
int min;
for (int i = 0; i < a - 1; i++) {
min = i;
for (int j = i + 1; j < a; j++)
if (tablica[j] < tablica[min])
min = j;
podmiana(&tablica[min], &tablica[i]);
}
printf("\n\n");
druk(a, tablica);
}
void podmiana(int* xp, int* yp)
{
int pomocnicza = *xp;
*xp = *yp;
*yp = pomocnicza;
}
void menu(int a, int tablica[])
{
int opcja;
printf("Dostepne opcje: \n");
printf("1. Sortowanie bobelkowe \n");
printf("2. Sortowanie przez wstawianie \n");
printf("3. Sortowanie przez wybieranie \n");
printf("4. Zakoncz program \n");
scanf("%d", &opcja);
switch (opcja) {
case 1:
printf("Wybrano sortowanie bobelkowe \n");
babelek(a, tablica);
break;
case 2:
printf("Wybrano sortowanie przez wstawianie \n");
wstaw(a, tablica);
break;
case 3:
printf("Wybrano sortowanie przez wybieranie \n");
wybieranie(a, tablica);
case 4:
printf("Program zakończony \n");
return 0;
break;
default:
printf("Wybierz poprawna opcję \n");
menu(a, tablica);
}
}