Beatrix Kiddo 103 Napisano 5 Stycznia 2013 Udostępnij Napisano 5 Stycznia 2013 (edytowane) Mam zrobić tablicę dwywymiarową , iczy to taka jakby macierz, zrobić 2 i zsumować. Jak to zrobić ? Tablice zrobiłem tylko zssumować nie wiem jak: #include <stdio.h> #include <conio.h> #include <stdlib.h> int main () { float tab[2][4]; int i,j; printf("podaj wartosci:\n"); for (i = 0; i<2;i++) for(j = 0; j<4; j++) { printf("tab[%d][%d] = ",i,j); scanf ("%f",&tab[i][j]); } for (i = 0; i<2;i++) for(j = 0; j<4; j++) { printf("tab[%d][%d] = %f\n",i,j, tab[i][j]); } getch(); } Zrobiłem też jednowymiarową, jak ktoś chce może mi pokazać jak zrobić na jednowymiarowej sumę. #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { float tab[5]; int i; printf ("podaj wartosci:\n"); for (i=0;i<5;i++) { printf("tab[%d] = ",i) ; scanf ("%f",&tab[i]); } printf ("Wczytane wartosci:\n"); for( i=0;i<5;i++) printf("\n tab[%i] = %f",i, tab[i]) ; getch(); } Edytowane 5 Stycznia 2013 przez Hearthland93 Cytuj Link to post Share on other sites
Hans Olo 92 Napisano 5 Stycznia 2013 Udostępnij Napisano 5 Stycznia 2013 Ogólnie operowanie na jednowymiarowych tablicach jest prostsze z programistycznego punktu widzenia, ale skoro takie zadanie to spoko. Żeby zsumować to musisz dodać do siebie liczby o przystających indeksach. Cytuj Link to post Share on other sites
Beatrix Kiddo 103 Napisano 5 Stycznia 2013 Autor Udostępnij Napisano 5 Stycznia 2013 Ogólnie operowanie na jednowymiarowych tablicach jest prostsze z programistycznego punktu widzenia, ale skoro takie zadanie to spoko. Żeby zsumować to musisz dodać do siebie liczby o przystających indeksach. z tymże nie wiem jak to zapisać, suma=tab+tab[j] w przypadku 1 wymiarowej tablicy , gdzie jedna to i , druga to j. Cytuj Link to post Share on other sites
Malwin 16 Napisano 5 Stycznia 2013 Udostępnij Napisano 5 Stycznia 2013 W przypadku dwuwymiarowej jest podobnie : a) tworzysz 3 macierz no bo gdzieś trzeba trzymać wyniki, chyba, że nie potrzebujesz już macierzy wejściowych to możesz zapisać, w któreś istniejącej b) sumujesz w petlach : sum[j] = tab1[j] + tab2[j] ( dla przypadku gdy stworzyłeś dodatkową tablice na wyniki) Cytuj Link to post Share on other sites
Beatrix Kiddo 103 Napisano 5 Stycznia 2013 Autor Udostępnij Napisano 5 Stycznia 2013 mam dwie tablice jednowymiarowe , tylko przy drugim wczytywaniu wczytuje same zera i bierze tab2[j]=0 i tak dla każdej wartości #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { float tab1[5]; float tab2[5]; int i,j; printf ("podaj wartosci:\n"); for (i=0;i<5;i++) { printf("tab1[%d] = ",i) ; scanf ("%f",&tab1[i]); } printf ("Wczytane wartosci:\n"); for( i=0;i<5;i++) printf("\n tab1[%i] = %f",i, tab1[i]) ; printf ("podaj wartosci:\n"); for (j=0;j<5;j++) { printf("tab2[%d] = ",j) ; scanf ("%f",&tab2[j]); } printf ("Wczytane wartosci:\n"); for( j=0;j<5;j++) printf("\n tab2[%j] = %f",j, tab2[j]) ; getch(); } Cytuj Link to post Share on other sites
Hans Olo 92 Napisano 5 Stycznia 2013 Udostępnij Napisano 5 Stycznia 2013 (edytowane) Sumować można tylko macierze przystające (takie same wymiary), więc kwestia jest prosta, także jednowymiarowe tablice będą takiego samego rozmiaru, więc pierwszy indeks sumujesz z pierwszym itd. W dodawaniu indeksowanie to nie problem, w mnożeniu i odwracaniu macierzy to już inna bajka. Dla ułatwienia: |a11 a12 a13| |a0 a1 a2| |a21 a22 a23| = |a3 a4 a5| = |a0 a1 a2 a3 a4 a5 a6 a7 a8| |a31 a32 a33| |a6 a7 a8| Musisz wtedy wprowadzić tzw offsety by wiedzieć, że jesteś w następnym wierszu/kolumnie. W sumowaniu offsetów potrzebujesz tylko i wyłącznie do wyświetlania tablicy jako dwuwymiarowej na ekranie. Edytowane 5 Stycznia 2013 przez Hans Olo Cytuj Link to post Share on other sites
Beatrix Kiddo 103 Napisano 5 Stycznia 2013 Autor Udostępnij Napisano 5 Stycznia 2013 (edytowane) z algebry liniowej ogarniam sporo, wiem co to macierze, wyznaczniki itd. niestety w przypadku tej informatyki jedynym moim problemem jest zapis sumy w programie, resztę to co powinienm zrobić teorytycznie wiem natomiast zapisać tego nie umiem żeby skompilowało. No chyba żeby zrobić tak: tab 3 = tab1+tab2 tab3[0]=tab1[0]+tab2[0] itd.. Edytowane 5 Stycznia 2013 przez Hearthland93 Cytuj Link to post Share on other sites
Hans Olo 92 Napisano 5 Stycznia 2013 Udostępnij Napisano 5 Stycznia 2013 tab3=tab1+tab2 Cytuj Link to post Share on other sites
Beatrix Kiddo 103 Napisano 5 Stycznia 2013 Autor Udostępnij Napisano 5 Stycznia 2013 A spójrz na ten kod, mam 2 te tablice, i ostatnie 3 linijki kodu spójrz bo suma wynosi u mnie a nie powinna #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { float tab1[5]; float tab2[5]; float tab3[5]; int i,j; printf ("podaj wartosci:\n"); for (i=0;i<5;i++) { printf("tab1[%d] = ",i) ; scanf ("%f",&tab1[i]); } printf ("Wczytane wartosci:\n"); for( i=0;i<5;i++) printf("\n tab1[%i] = %f",i, tab1[i]) ; printf ("podaj wartosci:\n"); for (i=0;i<5;i++) { printf("tab2[%d] = ",i) ; scanf ("%f",&tab2[i]); } printf ("Wczytane wartosci:\n"); for( i=0;i<5;i++) printf("\n tab2[%i] = %f",i, tab2[i]) ; tab3[i]=tab1[i]+tab2[i]; printf("\n suma wynosi tab3[%i] = %f",i, tab3[i]); getch(); } 0. Cytuj Link to post Share on other sites
Hans Olo 92 Napisano 5 Stycznia 2013 Udostępnij Napisano 5 Stycznia 2013 (edytowane) for( i=0;i<5;i++) { printf("\n tab2[%i] = %f",i, tab2) ; tab3=tab1+tab2; printf("\n suma wynosi tab3[%i] = %f",i, tab3); } Teraz możesz przejść do kolejnego uogólnienia algorytmu dostosowującego go do dowolnej wielkości macierzy np. do 1000 miejsc i wczytujących liczbę wierszy i kolumn od usera. Edytowane 5 Stycznia 2013 przez Hans Olo 1 Cytuj Link to post Share on other sites
Beatrix Kiddo 103 Napisano 8 Stycznia 2013 Autor Udostępnij Napisano 8 Stycznia 2013 (edytowane) Zrobiłem dla macierzy dwuwymiarowej , sumowanie oraz wyznaczanie maxymalnej wartości np. #include<stdio.h> #include<conio.h> int main() { int tab[2][2]; int tab1[2][2]; int tab2[2][2]; int i,j,max; for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("podaj element tab[%d][%d]: ",i,j); scanf("%d",&tab[i][j]); printf("\n"); } } for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("\n tab[%d][%d]=%d \t",i,j,tab[i][j]); } printf("\n"); } //nastepna tablica for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("\n podaj element tab1[%d][%d]: ",i,j); scanf("%d",&tab1[i][j]); printf("\n"); } } for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("\n tab1[%d][%d]=%d \t",i,j,tab1[i][j]); } printf("\n"); } for(i=0;i<2;i++) { for(j=0;j<2;j++) { tab2[i][j]=tab[i][j]+tab1[i][j]; printf("\n tab2[%d][%d]:=%d \t",i,j,tab2[i][j]); } } max=tab2[0][0]; for(i=0;i<2;i++) { for(j=0;j<2;j++) { if(tab2[i][j]>max) { max=tab2[i][j]; }}} printf("\n najwieksza wartosc elementu tablicy to %i",max); getch(); } Mam też prośbę, pomożesz Hans Olo, wyjaśnić ten program: #include <stdio.h> int main(void) { float macierz[20][20][1], suma_wiersze[20][1]={0}, suma_kolumny[20][1]={0}; int a, b, i, j; printf("Podaj dlugosc macierzy: "); scanf("%i",&a); printf("podaj wysokosc macierzy: "); scanf("%i", &b); for(i=0; i<b; i++) { for(j=0; j<a; j++) { printf("Podaj element %i %i macierzy: ", i+1, j+1); scanf("%f", &macierz[j][i][1]); } } for(i=0; i<b; i++) { for(j=0; j<a; j++) { suma_wiersze[i][1]+=macierz[j][i][1]; } } for(i=0; i<b; i++) { printf("Suma wiersza %i to %f\n", i+1, suma_wiersze[i][1]); } return 0; } Dokładnie chodzi mi o te linijki kodu: float macierz[20][20][1], suma_wiersze[20][1]={0}, suma_kolumny[20][1]={0}; printf("Podaj element %i %i macierzy: ", i+1, j+1); scanf("%f", &macierz[j][i][1]); suma_wiersze[i][1]+=macierz[j][i][1]; printf("Suma wiersza %i to %f\n", i+1, suma_wiersze[i][1]); Edytowane 8 Stycznia 2013 przez Hearthland93 Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.