Zmiana funkcji goto na if

Zmiana funkcji goto na if
MP
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 12 lat
  • Postów:1
0

Mam wielką prosbe musze zmienic wszystkie funkcje goto na if-y czy ktoś był by mi wstanie pomóc ??

/*
Program Kalkulator macierzowy: dodaje, mnoży, odejmuje macierze o rozmiarze 3x3
*/

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<time.h>
using namespace std;

int main()
{
start:
int a=0,b=0,wybormenu=0, wierszA=0, wierszB=0,wa=0, ka=0, wb=0, kb=0, liczba=0;
char odpA;

cout<<"Kalkulator macierzowy"<<endl;

int macierzA[3][3];
int macierzB[3][3];
int macierzC[3][3];

srand(time(NULL));// losowanie liczb
system("cls");
//wypełnianie macierzy A:
for(int i=0;i<3; i++)
{ for(int j=0; j<3; j++)
{ a=rand()%100;
macierzA[i][j]=a;
}
}
//wypełnianie macierzy B:
for(int k=0;k<3;k++)
{ for(int l=0; l<3; l++)
{ b=rand()%100;
macierzB[k][l]=b;
}
}
poczatek:
cout<<"MACIERZ A:"<<endl;
//wypisanie macierzy A:
for(int i=0;i<3; i++)
{ for(int j=0; j<3; j++)
{
cout<<" "<<macierzA[i][j]<<" ";// [i],[j] tablica dwuwymiarowa rozmiar i j
}
cout<<endl;
}
cout<<endl<<"MACIERZ B:"<<endl;
//wypisanie macierzy B:
for(int k=0;k<3;k++)
{ for(int l=0; l<3; l++)
{
cout<<" "<<macierzB[k][l]<<" ";
}
cout<<endl;
}

cout<<"MEMU: "<<endl<<endl;
cout<<"1. Zmiana danych w macierzy A"<<endl;
cout<<"2. Zmiana danych w macierzy B"<<endl;
cout<<"3. Dodawanie obu macierzy"<<endl;
cout<<"4. Odejmowanie obu macierzy"<<endl;
cout<<"5. Mnozenie obu macierzy"<<endl;
cout<<"6. Mnozenie macierzy A przez liczbe"<<endl;
cout<<"7. Mnozenie macierzy B przez liczbe"<<endl;
cout<<"8. Zakoncz program"<<endl;
cout<<"9. Uruchom ponownie program"<<endl;
cout<<"TWOJ WYBOR: ";
cin>>wybormenu;

switch(wybormenu)
{
//zmiana danych w macierzy A
case 1: cout<<endl<<"Podaj jaka zmienna chcesz poprawić: "<<endl;
cout<<"Numer wiersza: "; cin>>wa; cout<<"Numer kolumny: "; cin>>ka;
cout<<endl;
cout<<"Podaj wartosc jaka chcesz wstawic: "; cin>>wierszA;
macierzA[wa-1][ka-1]=wierszA;
system("cls");
goto poczatek;
break;
//zmiana danych w macierzy B
case 2: cout<<endl<<"Podaj jaka zmienna chcesz poprawić: "<<endl;
cout<<"Numer wiersza: "; cin>>wb; cout<<"Numer kolumny: "; cin>>kb;
cout<<endl;
cout<<"Podaj wartosc jaka chcesz wstawic: "; cin>>wierszB;
macierzB[wb-1][kb-1]=wierszB;
system("cls");
goto poczatek;
break;
//doawanie macierzy
case 3: cout<<"Dodawanie macierzy"<<endl;
if(3!=3 || 3!=3)
{ cout<<"Zle dane";}
else
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzC[i][j]=macierzA[i][j]+macierzB[i][j];
cout<<" "<<macierzC[i][j]<<" ";
}
cout<<endl;
}
}
cout<<"Czy podstawic macierz C za macierz A? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzA[i][j]=macierzC[i][j];
}
}
}
system("cls");
goto poczatek;
break;
//odejmowanie macierzy
case 4: cout<<"Odejmowanie macierzy"<<endl;
if(3!=3 || 3!=3)
{ cout<<"Zle dane";}
else
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzC[i][j]=macierzA[i][j]-macierzB[i][j];
cout<<" "<<macierzC[i][j]<<" ";
}
cout<<endl;
}
}
cout<<"Czy podstawic macierz C za macierz B? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzB[i][j]=macierzC[i][j];
}
}
}
system("cls");
goto poczatek;
break;

     //mnożenie macierzy

case 5: cout<<"Mnozenie macierzy"<<endl;
if(3!=3 || 3!=3)
{ cout<<"Zle dane";}
else
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzC[i][j]=macierzA[i][j]*macierzB[i][j];
cout<<" "<<macierzC[i][j]<<" ";
}
cout<<endl;
}
}
cout<<"Czy podstawic macierz C za macierz A? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzA[i][j]=macierzC[i][j];
}
}
}
system("cls");
goto poczatek;
break;

     //mnozenie macierzy A przez liczbe

case 6: cout<<"Mnozenie macierzy A przez liczbe"<<endl;
cout<<"Przez jaka liczbe pomnozyc macierz?: ";
cin>>liczba;
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzC[i][j]=macierzA[i][j]*liczba;
cout<<" "<<macierzC[i][j]<<" ";
}
cout<<endl;
}
cout<<"Czy podstawić macierz C za macierz A? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzA[i][j]=macierzC[i][j];
}
}
}
system("cls");
goto poczatek;
break;

     //mnozenie macierzy B przez liczbe

case 7: cout<<"Mnozenie macierzy B przez liczbe"<<endl;
cout<<"Przez jaka liczbe pomnozyc macierz?: ";
cin>>liczba;
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzC[i][j]=macierzB[i][j]*liczba;
cout<<" "<<macierzC[i][j]<<" ";
}
cout<<endl;
}
cout<<"Czy podstawić macierz C za macierz B? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{
for(int i=0; i<3 ; i++)
{
for(int j=0; j<3; j++)
{
macierzB[i][j]=macierzC[i][j];
}
}
}
system("cls");
goto poczatek;
break;
//kończenie pracy programu
case 8: system("cls");
cout<<"Czy na pewno chcesz zakończyć program? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{ goto koniec; }
else
{ system("cls");
goto poczatek;}
break;
//ponowne uruchomienie programu
case 9: system("cls");
cout<<"Czy na pewno chcesz ponownie uruchomic program? (t/n)";
cin>>odpA;
if(odpA=='t'||odpA=='T')
{ system("cls");
goto start; }
else
{ system("cls");
goto poczatek;}
break;

default: cout<<"Zly wybor, sproboj jeszcze raz:";
}
koniec:
cout<<"......."<<endl
<<"Nacisnij ENTER aby zakonczyc";
getchar();
cin.ignore();
return 0;
}

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Idę sobie wydłubać oczy...


1.Wrzuć ten kod w odpowiednie znaczniki. 2.Sformatuj go poprawnie. 3.Między innymi to: ```cpp if(3!=3 || 3!=3) ``` Nie ma sensu.
Ten program trzeba cały napisać od nowa, inaczej ciężko będzie wywalić to `goto`.

edytowany 1x, ostatnio: Patryk27
Patryk27
No i goto to nie jest funkcja ofc.
DA
  • Rejestracja:około 17 lat
  • Ostatnio:prawie 12 lat
1
  1. koniec
Kopiuj
goto koniec;

możesz spokojnie wywalić bez niczego, bo po prostu wychodzi ci ze switcha, a to samo robi break.

  1. poczatek
Kopiuj
poczatek:

zamień na:

Kopiuj
do { int again=0; 
Kopiuj
goto poczatek;

zamień na

Kopiuj
again = 1;

na zaraz za końcem switcha dodaj:

Kopiuj
} while(again);
  1. start
Kopiuj
goto start;

zamień na:

Kopiuj
return main();

albo gdy nie chcesz rekurencji, to na początku main daj:

Kopiuj
do { int againMain=0; 

następnie:

Kopiuj
goto start;

zamień na:

Kopiuj
againMain = 1;

a za:

Kopiuj
} while(again); // to co dodales za switchem w punkcie 2

dodaj jeszcze:

Kopiuj
} while(againMain);

#define if(x) if(rand()%6 && (x)) u mad? <img src="http://e.deviantart.net/emoticons/t/trollface.png" alt="user image" />
Patryk27
Nie można rekurencyjnie wywoływać main'a, tak na marginesie.
DA
nawet w sumie nigdy nie próbowałem... przyzwyczajenie z basha ($0) ;p
msm
W C można wywoływać main rekurencyjnie (w C++ nie). A jako że ten kod to w sumie C with cout...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.