Program obliczający iloczyn przekątnej tablicy oraz wiersza.
Ostatnio zmodyfikowano 2012-12-12 15:47
Los_Emilos Temat założony przez niniejszego użytkownika |
Program obliczający iloczyn przekątnej tablicy oraz wiersza. » 2012-12-11 21:45:21 Mam problem z działaniem dwóch funkcji programu. Przy pierwszej wynik zawsze jest 1, przy drugiej program się zawiesza. Oto cały kod programu: #include <cstdio> #include <iostream> #include <conio.h> #include <windows.h> #include <cstdlib> #include <ctime>
using namespace std;
int losowanie() { return rand() % 8 + 1; }
int main() { char menuglowne; int rozmiarmacierzy, macierz[ 10 ][ 10 ]; printf( "Wybierz rozmiar macierzy kwadratowej, maksymalny rozmiar:10.\n" ); scanf( "%d", & rozmiarmacierzy ); srand( time( NULL ) ); printf( "\nOto twoja macierz.\n" ); for( int i = 0; i < rozmiarmacierzy; i++ ) { for( int j = 0; j < rozmiarmacierzy; j++ ) { macierz[ i ][ j ] = losowanie(); printf( "%d ", macierz[ i ][ j ] ); } printf( "\n" ); } printf( "Wybierz jakie zadanie chcesz wykonac:\n1. Suma wartosci macierzy na przekatnej.\n2.Iloczyn wartosci i-tego wiersza.\n3.Wyswietl cala tablice wraz z zaznaczonymi onnym kolorem wartosciami podzielnymi przez 5 bez reszty\n" ); scanf( "%s", & menuglowne ); switch( menuglowne ) { case '1': { printf( "Suma wartosci po przekatnej:\na)lewej.\nb)prawej.\n" ); / tu zaczyna sie iloczyn przekatnej char podmenu; scanf( "%s", & podmenu ); switch( podmenu ) { case 'a': { int iloczynprzekatnej = 1; for( int i = 0; i < rozmiarmacierzy; i++ ) { iloczynprzekatnej *= macierz[ i ][ i ]; } printf( "%d", iloczynprzekatnej ); break; } case 'b': { int iloczynprzekatnej = 1; int wspolrzednatablicy = rozmiarmacierzy - 1; for( int i = 0; i < rozmiarmacierzy; i++ ) { iloczynprzekatnej *= macierz[ i ][ wspolrzednatablicy ]; wspolrzednatablicy--; } printf( "%d", iloczynprzekatnej ); break; } } break; } case '2': { printf( "Wybierz wiersz do obliczenia iloczynu wartosci:\n" ); / obliczanie wiersza int wiersz; int iloczyn = 1; scanf( "%d", wiersz ); for( int i = 0; i < rozmiarmacierzy; i++ ) { iloczyn *= macierz[ i ][ wiersz - 1 ]; } printf( "%d", iloczyn ); break; } case '3': { for( int i = 0; i < rozmiarmacierzy; i++ ) { for( int j = 0; j < rozmiarmacierzy; j++ ) { if( macierz[ i ][ j ] % 5 == 0 ) SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 4 ); else SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 7 ); printf( "%d ", macierz[ i ][ j ] ); } printf( "\n" ); } break; } } return 0; }
|
|
Admixior |
» 2012-12-11 22:51:39 Po pierwsze mi się wydaje że suma to suma nie iloczyn ;] Duo: słyszałeś o atakach typu buffer overflow na programy? Właśnie tutaj sobie to zrobiłeś. Psujesz sobie poprzednią wartość na stosie. scanf( "%s", & menuglowne ); //funkcja zapisze pierwszy znak do menu główne resztą nadpisuje to co było nastosie. Jeśli podasz 1 znak to resztą będzie tylko NULL Powinieneś użyć "%c" do pobrania jednego znaku. Tak samo w podmenu. |
|
CodeMeister |
» 2012-12-12 15:47:13 A tobie tylko haki w głowie ;) |
|
« 1 » |