Skocz do zawartości

Recommended Posts

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 przez Hearthland93
Link to post
Share on other sites
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.

Link to post
Share on other sites

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)

Link to post
Share on other sites

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();
}
Link to post
Share on other sites

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 przez Hans Olo
Link to post
Share on other sites

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 przez Hearthland93
Link to post
Share on other sites

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.:P

Link to post
Share on other sites

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 przez Hans Olo
  • Popieram 1
Link to post
Share on other sites

Zrobiłem dla macierzy dwuwymiarowej , sumowanie oraz wyznaczanie maxymalnej wartości np. :P

#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 przez Hearthland93
Link to post
Share on other sites

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ą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...