Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

lin123

Problem z programem w którym wybiera się 1z5 opcji

Rekomendowane odpowiedzi

Jak zrobić odwołanie do innych programów poprzez void ? Zrobiłem coś takiego, pierwsza opcja czyli rozwiązywanie równania kwadratowego działa ale jak daję opcję 2 to program wypisuje tylko że została wybrana opcja 2 i tyle. Co zrobiłem nie tak?

 

#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;
   }
}

void ukl()
{
   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");
           ukl();
           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;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Matko bosko elektryczno! Rób jakieś wcięcia bo tu nic nie widać.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

void ukl()
{
   void wczytaj_dane(double a[][2], double b[])
   {
   }

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

   int main()
   {
   }
}

 

dzizas - co to za konstrukcja?

 

liczysz że ten main w ukl się wywoła automagicznie?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...