Program w którym wybiera się jedną z pięciu opcji

0

Jak zrobić odwołanie do innych programów poprzez void ? Zrobiłem coś takiego ale nie chce się skompilować
Dokładniej zrobiłem programy takie jak poniżej czyli równanie kwadratowe itd. Teraz chciałbym by po wybraniu opcji np. 1 program rozwiązywał równanie. Resztę programów oczywiście też mam także o nie nie proszę.

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

int menu()
{
    printf("1. Rownanie kwadratowe \n");
    printf("2. uklad dwoch rownan \n");
    printf("3. Uklad trzech rownan \n");
    printf("4. Rownanie trzeciego stopnia \n");
    printf("5. Koniec programu \n");
    printf("Dokonaj wyboru: \n");
    int n;
    scanf("%d", &n);
    return n;
}

int main()
{
    while (1)
        switch (menu()) {
        case 1:
            printf("Wybrano opcje 1\n");
            void row()
            {
                double a, b, c;
                printf("podaj rownanie kwadratowe: ");
                scanf("%lfx^2%lfx%lf=0", &a, &b, &c);
                double delta = b * b - 4 * a * c;

                if (delta < 0.0) {
                    printf("rownanie ax^2-bx+c=0 nie ma pierwiastkow\n");
                    return;
                }

                if (delta == 0.0) {
                    printf("rownanie ax^2-bx+c=0 ma jeden pierwiastek: %f\n", -b / (2 * a));
                    return;
                }

                delta = sqrt(delta);
                double x1 = (-b - delta) / (2 * a);
                double x2 = (-b + delta) / (2 * a);
                printf("rownanie ax^2-bx+c ma dwa pierwstki x1=%f, x2=%f\n", x1, x2);
                return;
            }
            break;

        case 2:
            printf("Wybrano opcje 2\n");
            break;
        case 3:
            printf("Wybrano opcje 3\n");
            break;
        case 4:
            printf("wybrano opcje 4\n");
            break;
        case 5:
            exit(0);
        default:
            printf("nie ma takiej opcji\n");
            break;
        }
    return 0;
}
0
void row()
{
    ....
}

int main()
{
    while (1)
        switch (menu()) {
        case 1:
            printf("Wybrano opcje 1\n");
            row();
            break;
        case 2:
0
 #include <stdio.h>
#include <math.h>
#include <stdlib.h>

int menu()
{
    printf("1. Rownanie kwadratowe \n");
    printf("2. uklad dwoch rownan \n");
    printf("3. Uklad trzech rownan \n");
    printf("4. Rownanie trzeciego stopnia \n");
    printf("5. Koniec programu \n");
    printf("Dokonaj wyboru: \n");
    int n;
    scanf("%d", &n);
    return n;
}

void row()
{
    {
        double a, b, c;
        printf("podaj rownanie kwadratowe: ");
        scanf("%lfx^2%lfx%lf=0", &a, &b, &c);
        double delta = b * b - 4 * a * c;

        if (delta < 0.0) {
            printf("rownanie ax^2-bx+c=0 nie ma pierwiastkow\n");
            return;
        }

        if (delta == 0.0) {
            printf("rownanie ax^2-bx+c=0 ma jeden pierwiastek: %f\n", -b / (2 * a));
            return;
        }

        delta = sqrt(delta);
        double x1 = (-b - delta) / (2 * a);
        double x2 = (-b + delta) / (2 * a);
        printf("rownanie ax^2-bx+c ma dwa pierwstki x1=%f, x2=%f\n", x1, x2);
        return;
    }
}
int main()
{
    while (1)
        switch (menu()) {
        case 1:
            printf("Wybrano opcje 1\n");
            void row();
            break;

        case 2:
            printf("Wybrano opcje 2\n");
            break;
        case 3:
            printf("Wybrano opcje 3\n");
            break;
        case 4:
            printf("wybrano opcje 4\n");
            break;
        case 5:
            exit(0);
        default:
            printf("nie ma takiej opcji\n");
            break;
        }
    return 0;
}

Przy takim rozwiązaniu przy uruchomieniu program wyświetla tylko którą opcję wybrałem ale nie wylicza rozwiązania równania, w czym może być problem?

1
row();

nie

void row();
1
#include <stdio.h>
typedef void(*func_t)();

void func1(){ puts("hello"); }
void func2(){ puts("Ello"); }
void func3(){ puts("Ohayo"); }

int main(void){
	func_t funcs[3] = {
		func1, func2, func3
	};
	
	int which;
	scanf("%d", &which);
	if(which >= 0 && which < 3)
		funcs[which]();
	else puts("No func found.");
	return 0;
}
0

O ile w pierwszym przypadku (z równaniem kwadratowym) takie rozwiązanie działa prawie bez zastrzeżeń (oblicza rozwiązanie ale zaraz wyświetla że nie ma takiej opcji) to czy w ten sam sposób należy zrobić w kolejnych przypadkach? Jak dałem pod void row() {...} kolejną opcję void uklad() {...} to już ta opcja nie działa

1

Jeśli nie chcesz zrobić elegancko jak @spartanPAGE pokazał, to możesz dalej w ten sam sposób.

#include <stdio.h>

int menu()
{
    int choice;
    printf("Menu: ");
    scanf("%d", &choice);
    return choice;
}

void row()
{
    printf("row\n");
}

void uklad()
{
    printf("uklad\n");
}

int main()
{
    while (1)
    {
        switch (menu()) 
        {
        case 1:
            printf("Wybrano opcje 1\n");
            row();
            break;
        case 2:
            printf("Wybrano opcje 2\n");
            uklad();
            break;
        case 3:
            printf("Wybrano opcje 3\n");
            break;
        case 4:
            printf("wybrano opcje 4\n");
            break;
        case 5:
            return 0;
        default:
            printf("nie ma takiej opcji\n");
        }
    }
    
    return 0;
}
0

Dlaczego robiąc tak jak niżej widać, nie uruchamia się druga opcja a przy wyborze pierwszej po wpisaniu równania i obliczeniu automatycznie wyświetla się że nie ma takiej opcji i jeszcze raz menu? I przede wszystkim jak to zmienić?

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

int menu()
{
    printf("1. Rownanie kwadratowe \n");
    printf("2. uklad dwoch rownan \n");
    printf("3. Uklad trzech rownan \n");
    printf("4. Rownanie trzeciego stopnia \n");
    printf("5. Koniec programu \n");
    printf("Dokonaj wyboru: \n");
    int n;
    scanf("%d", &n);
    return n;
}

void row()
{
    double a, b, c;
    printf("podaj rownanie kwadratowe: ");
    scanf("%lfx^2%lfx%lf=0", &a, &b, &c);
    double delta = b * b - 4 * a * c;
    if (delta < 0.0) {
        printf("rownanie ax^2-bx+c=0 nie ma pierwiastkow\n");
        return;
    }
    if (delta == 0.0) {
        printf("rownanie ax^2-bx+c=0 ma jeden pierwiastek: %f\n", -b / (2 * a));
        return;
    }
    delta = sqrt(delta);
    double x1 = (-b - delta) / (2 * a);
    double x2 = (-b + delta) / (2 * a);
    printf("rownanie ax^2-bx+c ma dwa pierwstki x1=%f, x2=%f\n", x1, x2);
    return;
}

void uklad()
{
    void wczytaj_dane(double a[][2], double b[])
    {
        printf(" podaj uklad rownan postaci: \n");
        printf("a11x1+a12x2=b1\n");
        printf("a21x1+a22x2=b2\n");
        /* 3x1-5x2=-3
5x1+3x2=8 */
        scanf(" %lfx1%lfx2=%lf", &a[0][0], &a[0][1], &b[0]);
        scanf(" %lfx1%lfx2=%lf", &a[1][0], &a[1][1], &b[1]);
        return;
    }

    double wyznacznik(double a[][2])
    {
        return a[0][0] * a[1][1] - a[1][0] * a[0][1];
    }

    int main()

    {
        double a[2][2], b[2];
        wczytaj_dane(a, b);
        double w = wyznacznik(a);
        double t[2][2];
        t[0][0] = b[0];
        t[0][1] = a[0][1];
        t[1][0] = b[1];
        t[1][1] = a[1][1];
        double w1 = wyznacznik(t);
        t[0][0] = a[0][0];
        t[1][0] = a[1][0];
        t[0][1] = b[0];
        t[1][1] = b[1];
        double w2 = wyznacznik(t);
        printf("uklad rownan: \n");
        printf("%gx1%+gx2=%g\n", a[0][0], a[0][1], b[0]);
        printf("%gx1%+gx2=%g\n", a[1][0], a[1][1], b[1]);
        if (w != 0)
            printf("ma rozwiazanie x1=%g i x2=%g\n", w1 / w, w2 / w);
        else if (w1 == 0 && w2 == 0)
            printf("ma nieskonczenie wiele rozwiazan postaci %gx1%+gx2=%g\n");
        else
            printf("jest sprzeczny\n");
        return 0;
    }
}

int main()
{
    while (1) {
        switch (menu()) {
        case 1:
            printf("Wybrano opcje 1\n");
            row();
            break;
        case 2:
            printf("Wybrano opcje 2\n");
            uklad();
            break;
        case 3:
            printf("Wybrano opcje 3\n");
            break;
        case 4:
            printf("wybrano opcje 4\n");
            break;
        case 5:
            return 0;
        default:
            printf("nie ma takiej opcji\n");
        }
    }

    return 0;
}

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