Skocz do zawartości


Zdjęcie

PRZEKATNA


  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 michaass

michaass
  • Użytkownicy
  • 11 postów

Napisano 30 marzec 2012 - 13:08

Witam, mam pytanko, potrzebuje zmodyfikować ten program do c++ ale wywala mi błąd.
założenie było takie, że w macierzy kwadratowej n x n ma policzyć główną przekątną:
Ja napisałem coś takiego ale liczy każdą przekątną niezależnie od wymiaru.
Please jak ktoś wie jak naprawić to bede wdzieczny :)



int przekatna(){
cout<<"Okresl wymiary tablicy kwadratowej\n (podaj ilosc wierszy i ilosc kolumn z odstepem): "
int a,b,suma=0;
cin>>a >>b;
cout<<"Wpisz elementy tablicy : "<<a <<b;
int tab[a][b]
for(int j=0;j<b;j++)
for(int i=0;i<a;i++) cin>>tab[i][j]
if ( a > b,) a=b;
for(int j=0;j<a;j++) suma+=tab[j][j]
cout<<"Suma elementow na glownej przekatnej tablicy to: "<<suma<<"\n\n"
}

EDITL powinny byc " ;" ale wyswietla emotikonki to pouuwałem
  • 0


#2 yogee

yogee
  • Użytkownicy
  • 53 postów

Napisano 30 marzec 2012 - 14:33

jeśli ma to liczyć przekątną TYLKO dla macierzy kwadratowej to ostatnią pętlę for (liczącą sumę) umieść wewnątrz if-a sprawdzającego czy a == b. Jeśli warunku nie spełnia - nie licz/wypisz komunikat o błedzie. Usuń też "if ( a > b,) a=b;" - to ma zapewniać jakieś wyniki, dla macierzy prostokątnych, co raczej nie jest potrzebne. Zbędny jest też przecinek wewnątrz tego nawiasu (jeśli już chcesz to zostawić)

A tak w ogóle - skoro na początku programu prosisz o wymiar macierzy kwadratowej - wystarczy prosić o jeden - w końcu ma być kwadratowa. Odpada wtedy konieczność sprawdzania zgodności wymiarów a i b.
  • 0
Athlon II x4 630 || Gigabyte 785GT-UD3H || Kingston [2x4GB + 2x2GB] DDR3 || MSI GTS450 OC || ocz StealthXStream 500W || Seagate st3500418AS 500GB + st2000DL003 2TB || Compro Videomate e650f || Microsoft Wireless 800 || BenQ G2220HD || Kenwood KA-1010 :)

Coś jeszcze dopisać? :)

#3 mw_1975

mw_1975
  • Użytkownicy
  • 2535 postów

Napisano 30 marzec 2012 - 15:21

Jeśli ma liczyć tylko i wyłącznie przekątną, to NIE stosuj dwu pętli. Wystarczy jedna, której indeks będzie "łapał" zarówno "pion", jak i "poziom" tablicy. Czyli coś takiego:

licznik=0;
for(int i=0;i<a;i++) licznik+=tab[i,i];

Mam nadzieję, że z wypisem na ekranie sobie poradzisz.
  • 0
AMD Phenom II 955
Pentagram Karakorum HP-120 AlCu + Arctic Cooling AF1225L
4 GB DDR3 1600 MHz
Było Asus Radeon HD 6950 DCU II, jest XFX 7850 z AC Mono - czego się nie robi dla tej ciszy!
SilentiumPC Deus G1 600W

#4 yogee

yogee
  • Użytkownicy
  • 53 postów

Napisano 30 marzec 2012 - 15:24

Jeśli ma liczyć tylko i wyłącznie przekątną, to NIE stosuj dwu pętli. Wystarczy jedna, której indeks będzie "łapał" zarówno "pion", jak i "poziom" tablicy. Czyli coś takiego:

licznik=0;
for(int i=0;i<a;i++) licznik+=tab[i,i];

Mam nadzieję, że z wypisem na ekranie sobie poradzisz.


Te dwie pętle są do magicznego wypełniania wartości ;P samo liczenie sumy jest takie jak mówisz (ostatni for) ;)
  • 0
Athlon II x4 630 || Gigabyte 785GT-UD3H || Kingston [2x4GB + 2x2GB] DDR3 || MSI GTS450 OC || ocz StealthXStream 500W || Seagate st3500418AS 500GB + st2000DL003 2TB || Compro Videomate e650f || Microsoft Wireless 800 || BenQ G2220HD || Kenwood KA-1010 :)

Coś jeszcze dopisać? :)


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych