[C] tablice wymiarowe
-
- Użytkownik
- Posty: 74
- Rejestracja: 3 cze 2009, o 09:14
- Płeć: Mężczyzna
- Podziękował: 3 razy
[C] tablice wymiarowe
witam mam taki problem...
potrzebuję stworzyć program który wykonuje działanie na macierzach...
można prosić o jakąś pomoc? jak wpisywać dane do macierzy... czy tak samo będzię sie robiło dla liczb zespolonych?
potrzebuję stworzyć program który wykonuje działanie na macierzach...
można prosić o jakąś pomoc? jak wpisywać dane do macierzy... czy tak samo będzię sie robiło dla liczb zespolonych?
- Sokół
- Użytkownik
- Posty: 451
- Rejestracja: 17 wrz 2006, o 19:22
- Płeć: Mężczyzna
- Lokalizacja: Zielona Góra
- Podziękował: 15 razy
- Pomógł: 55 razy
[C] tablice wymiarowe
Macierz to zwyczajna tablica dwuwymiarowa, w c++ nie ma osobnego typu dla liczb zespolonych. Dobrze by było zdefiniować typ strukturalny, który by składał się z części rzeczywistej i urojonej.
Wpisywanie danych możesz zrobić w dwóch zagnieżdżonych pętlach, jedna będzie przechodzić po kolejnych komórkach w wierszu, a druga po kolejnych wierszach.
Do tablicy odwołujesz się w sposób tab[kolumna][wiersz] albo tab[wiersz][kolumna], to od Ciebie zależy jak zorganizujesz te dane.
-- czwartek, 15 kwietnia 2010, 21:51 --
stworzywszy typ strukturalna np. Complex, z polem na część rzeczywistą i urojoną stworzyłbyś tablicę takich typów.
Wpisywanie danych możesz zrobić w dwóch zagnieżdżonych pętlach, jedna będzie przechodzić po kolejnych komórkach w wierszu, a druga po kolejnych wierszach.
Do tablicy odwołujesz się w sposób tab[kolumna][wiersz] albo tab[wiersz][kolumna], to od Ciebie zależy jak zorganizujesz te dane.
-- czwartek, 15 kwietnia 2010, 21:51 --
stworzywszy typ strukturalna np. Complex, z polem na część rzeczywistą i urojoną stworzyłbyś tablicę takich typów.
-
- Użytkownik
- Posty: 74
- Rejestracja: 3 cze 2009, o 09:14
- Płeć: Mężczyzna
- Podziękował: 3 razy
[C] tablice wymiarowe
a moglbys mi pomoc, jak dokladnie wpisywać te dane do tablicy za pomoca struktur...
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C] tablice wymiarowe
Nie za pomocą struktur tylko wpisujesz dane do tablicy struktur. Tablica to na poziomie logicznym uporządkowany indeksem zbiór danych - przy czym te dane moga być zarówno standardowym typem jak np. int, double, float itp. jak i typem zdefiniowanym przez ciebie np. jakąś strukturą.jak dokladnie wpisywać te dane do tablicy za pomoca struktur.
Masz więć strukturę definującą zmienną zespoloną
Kod: Zaznacz cały
struct Copmpex{
float Re;
float Im;
};
Kod: Zaznacz cały
struct Complex matrix[10][10]; <- statyczna deklaracja, dynamicznie, czyli ze zmiennym rozmiarem za pomocą malloc.
Kod: Zaznacz cały
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%f %f",&matrix[i][j].Re,&matrix[i][j].Im);
-
- Użytkownik
- Posty: 74
- Rejestracja: 3 cze 2009, o 09:14
- Płeć: Mężczyzna
- Podziękował: 3 razy
[C] tablice wymiarowe
ja potrzebuje dynamiczną tablicę...
stworzyłem tą tablicę i tę funkcję ale nie działa...-- 17 kwi 2010, o 16:38 --moglbys mi pokazac jak stworzyc ta tablice struktur dwuwymiarowa, i jak wprowadzac do niej dane....
stworzyłem tą tablicę i tę funkcję ale nie działa...-- 17 kwi 2010, o 16:38 --moglbys mi pokazac jak stworzyc ta tablice struktur dwuwymiarowa, i jak wprowadzac do niej dane....
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C] tablice wymiarowe
Napisz tutaj swój cały kod. Powiem ci co masz xle zrobione i podowiem jak zrobić dynamiczna alokację.
-
- Użytkownik
- Posty: 74
- Rejestracja: 3 cze 2009, o 09:14
- Płeć: Mężczyzna
- Podziękował: 3 razy
[C] tablice wymiarowe
to jest mój kod:
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct complex {
double re;
double im;
};
int main()
{
int x,y,i,j,a,b;
int **macierz;
printf("Podaj wymiary macierzy (x spacja y): ");
scanf("%d %d",&x,&y);
//dynamiczne utworzenie macierzy
struct complex macierz[x][y];
macierz=(int**)malloc(sizeof(int*)*y);
for(i=0;i<y;i++)
macierz[i]=(int*)malloc(sizeof(int)*x);
//wyzerowanie macierzy
for(i=0;i<y;i++)
for(j=0;j<x;j++)
macierz[i][j]=0;
for (i=0;i<x;i++)
for (j=0;j<y;j++)
{
printf("podaj liczbe: ");
scanf("%f,%f", &macierz[i][j].re, &macierz[i][j].im);
}
printf("Wypisanie macierzy:\n");
for(i=0;i<y;i++)
{
for(j=0;j<x;j++)
printf("%d",macierz[i][j]);
putchar('\n');
}
return 0;
}
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C] tablice wymiarowe
"Trochę" namieszałeś.
Pierwsza linijka ma oznaczać zadeklaruj mi tablicę chociaż nie podam ci rozmiaru? Pozostała część jest ok tyle, że chcesz mieć tablicę struktur a nie liczb całkowitych.
Skoro będziesz wypełniał tablicę to po co ja zerować, ale jak już chcesz to musisz zerować konkretne pole w strukturze a nie niewiadomo co - musi być
Dalej piszesz
nie dość że próbujesz wypisać całą strukturę a nie konkretną wartość pola(tak prosto sie nie da, musisz powiedzieć jakie pole chcesz wypisać) to jeszcze namawiasz funkcje printf żeby wcisnęła to w liczbę całkowitą (%d)?
Tak na koniec to jak cos zaalokujesz w pamieci to warto to potem usunąć choc coraz wiecej ide robi to za nas to jednak jest to dobry zwyczaj - służy do tego funkcja free.
Oto poprawiony kod - pozmieniałem tez trochę wpisywanie i wypisywanie żeby było wygodniej.
Kod: Zaznacz cały
//dynamiczne utworzenie macierzy
struct complex macierz[x][y];
macierz=(int**)malloc(sizeof(int*)*y);
for(i=0;i<y;i++)
macierz[i]=(int*)malloc(sizeof(int)*x);
Kod: Zaznacz cały
//wyzerowanie macierzy
for(i=0;i<y;i++)
for(j=0;j<x;j++)
macierz[i][j]=0;
Kod: Zaznacz cały
macierz[i][j].re=0;
macierz[i][j].im=0;
Kod: Zaznacz cały
printf("%d",macierz[i][j]);
Tak na koniec to jak cos zaalokujesz w pamieci to warto to potem usunąć choc coraz wiecej ide robi to za nas to jednak jest to dobry zwyczaj - służy do tego funkcja free.
Oto poprawiony kod - pozmieniałem tez trochę wpisywanie i wypisywanie żeby było wygodniej.
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
struct complex
{
float re;
float im;
};
int main()
{
struct complex ** macierz;
int x,y,i,j;
printf("Podaj wymiary macierzy (x spacja y): ");
scanf("%d %d",&x,&y);
//dynamiczne utworzenie macierzy
macierz=(struct complex **)malloc(y*sizeof(struct complex*));
for(i=0;i<y;i++)
macierz[i]=(struct complex *)malloc(x*sizeof(struct complex));
for (i=0;i<x;i++)
for (j=0;j<y;j++)
{
printf("podaj liczbe(a+bi): ");
scanf("%f+%fi", &macierz[i][j].re, &macierz[i][j].im);
}
printf("Wypisanie macierzy:\n");
for(i=0;i<y;i++)
{
for(j=0;j<x;j++)
{
printf("%.2f+%.2fi",macierz[i][j].re,macierz[i][j].im);
putchar(' ');
}
putchar('\n');
}
for(i=0;i<y;i++)
free(macierz[i]);
free(macierz);
return 0;
}
-
- Użytkownik
- Posty: 74
- Rejestracja: 3 cze 2009, o 09:14
- Płeć: Mężczyzna
- Podziękował: 3 razy
[C] tablice wymiarowe
działa:) trochę zmieniłem wpisywanie do macierzy...
teraz aby np dodawać dwie macierze to musze wykorzystać struktury które wykorzystuje się do dodawania dwóch liczb zespolonych, tak?
jakbym czegoś nie wiedział mogę pytać?
teraz aby np dodawać dwie macierze to musze wykorzystać struktury które wykorzystuje się do dodawania dwóch liczb zespolonych, tak?
jakbym czegoś nie wiedział mogę pytać?
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C] tablice wymiarowe
Coś żeś się uparł do rozumienia struktury jako jakiegos mechanizmu. Tu jest to synonim rekordu, obiektu etc. .musze wykorzystać struktury które wykorzystuje się do dodawania dwóch liczb zespolonych
Musisz stworzyć własna funkcję, która jako parametry pobierze dwie struktury typu complex i zwróci strukturę wynikową. Tak byłoby oczywiście najlepiej - można nie używać żadnych funkcji i sumować odpowiednie pola odpowiednich struktur, tylko, że tracimy element strukturalizacji. taki przykładowy nagłówek funkcji:
Kod: Zaznacz cały
struct complex wynik DodajZesp(struct complex a,struct complex b)
A czemu miałbys nie mócjakbym czegoś nie wiedział mogę pytać?
-
- Użytkownik
- Posty: 74
- Rejestracja: 3 cze 2009, o 09:14
- Płeć: Mężczyzna
- Podziękował: 3 razy
[C] tablice wymiarowe
qrcze nie wiem... nic mi nie wychodzi...
nie wiem jak to zrobić...
-- 20 kwi 2010, o 07:48 --
moglbys spojrzec czy jest wszystko ok?
a moglbys pomoc mi podzielić mi to na funkcje...
nie wiem jak to zrobić...
-- 20 kwi 2010, o 07:48 --
moglbys spojrzec czy jest wszystko ok?
a moglbys pomoc mi podzielić mi to na funkcje...
Kod: Zaznacz cały
//main.c
#include <stdio.h>
#include <stdlib.h>
#include "macierzenag.h"
/*struct complex
{
float re;
float im;
};*/
int main()
{
/*struct complex ** macierz;
int x,y,i,j;*/
printf("Podaj wymiary macierzy1 (x spacja y): ");
scanf("%d %d",&x,&y);
//dynamiczne utworzenie macierzy1
macierz1=(struct complex **)malloc(y*sizeof(struct complex*));
for(i=0;i<y;i++)
macierz1[i]=(struct complex *)malloc(x*sizeof(struct complex));
for (i=0;i<x;i++)
for (j=0;j<y;j++)
{
printf("podaj liczbe(a,b) na miejscu [%d%d]: ",(i+1),(j+1));
scanf("%f,%f", &macierz1[i][j].re, &macierz1[i][j].im);
}
printf("Podaj wymiary macierzy2 (x spacja y): ");
scanf("%d %d",&w,&z);
//dynamiczne utworzenie macierzy2
macierz2=(struct complex **)malloc(z*sizeof(struct complex*));
for(i=0;i<z;i++)
macierz2[i]=(struct complex *)malloc(w*sizeof(struct complex));
for (i=0;i<w;i++)
for (j=0;j<z;j++)
{
printf("podaj liczbe(a,b) na miejscu [%d%d]: ",(i+1),(j+1));
scanf("%f,%f", &macierz2[i][j].re, &macierz2[i][j].im);
}
//wypisanie macierzy1
printf("Wypisanie macierzy1:\n");
for(i=0;i<y;i++)
{
for(j=0;j<x;j++)
{
printf("%.2f+%.2fi",macierz1[i][j].re,macierz1[i][j].im);
putchar(' ');
}
putchar('\n');
}
//wypisanie macierzy2
printf("Wypisanie macierzy2:\n");
for(i=0;i<z;i++)
{
for(j=0;j<w;j++)
{
printf("%.2f+%.2fi",macierz2[i][j].re,macierz2[i][j].im);
putchar(' ');
}
putchar('\n');
}
//wypisanie dodania macierzy
printf("Wypisanie dodania macierzy:\n");
for(i=0;i<z;i++)
{
for(j=0;j<w;j++)
{
printf("%.2f+%.2fi",(macierz1[i][j].re+macierz2[i][j].re),(macierz1[i][j].im+macierz2[i][j].im));
putchar(' ');
}
putchar('\n');
}
/*for(i=0;i<y;i++)
free(macierz[i]);
free(macierz);
*/
return 0;
}