Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program obliczający iloczyn przekątnej tablicy oraz wiersza.

Ostatnio zmodyfikowano 2012-12-12 15:47
Autor Wiadomość
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:

C/C++
#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;
}
P-70800
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.
P-70806
CodeMeister
» 2012-12-12 15:47:13
A tobie tylko haki w głowie ;)
P-70836
« 1 »
  Strona 1 z 1