Napisac w jezyku C program obliczajacy wyznacznik macierzy
o dowolnym rozmiarze. Macierz powinna byc wczytywana z pliku tekstowego.
Treść rozumiem bardzo dobrze. Nie umiem jedynie przełożyć tego na język C.
Mianowicie chcę stworzyć sobie dwie tablice:
- pierwsza to tablica wskaźników na pierwsze elementy każdego wiersza macierzy
- druga to tablica zawierająca wszystkie elementy macierzy
plik tekstowy wygląda np. tak:
3
1 2 3
4 5 6
7 8 9
Przy czym cyfra na samej górze to rozmiar macierzy, a pozostałe cyfry to jej elementy.
Jestem głupi. Tzn. nie w sensie dosłownym, tylko nie umiem sprawnie programować, brak mi narzędzi żeby przelać dany pomysł na kod.
Myślę, że z policzeniem wyznacznika dam sobie radę, natomiast mam problem ze skopiowaniem fscanf'em danych z pliku do programu.
Kod na razie wygląda tak:
#include <stdio.h>
#include <stdlib.h>
int czytajZPliku();
void stworzTabliceWsk(double tab_wsk, int rozmiar);
double liczWyznacznik();
int main(){
int rozmiar_macierzy = czytajZPliku();
printf("\nRozmiar macierzy wczytanej z pliku to: %d\n", rozmiar_macierzy);
double *tab_wsk = (double*)malloc(sizeof(double) * rozmiar_macierzy);
stworzTabliceWsk(*tab_wsk, rozmiar_macierzy);
/*printf("Wyznacznik tej macierzy to: %lf", liczWyznacznik());*/
free (tab_wsk);
printf("\n\n");
system("PAUSE");
return 0;
}
int czytajZPliku(){
int rozmiar = 0;
FILE *plik;
plik = fopen ("macierz.txt","r");
if (plik!=NULL){
fscanf(plik, "%d", &rozmiar);
fclose(plik);
return rozmiar;
}
else {
printf("Plik tekstowy jest nieprawdlowy.\n");
return 0;
}
}
void stworzTabliceWsk(double tab_wsk, int rozmiar){
int i = 0;
FILE *plik;
plik = fopen ("macierz.txt","r");
if (plik!=NULL){
fclose(plik);
}
else {
printf("Plik tekstowy jest nieprawdlowy.\n");
exit(1);
}
}
double liczWyznacznik(){
double wynik = 0;
/* ... */
return wynik;
}
Nie kompiluje się.
Komunikaty od Visual C++:
1>------ Build started: Project: Wyznacznik, Configuration: Release Win32 ------
1> wyznacznik.c
1>wyznacznik.c(17): error C2143: syntax error : missing ';' before 'type'
1>wyznacznik.c(18): error C2065: 'tab_wsk' : undeclared identifier
1>wyznacznik.c(18): error C2100: illegal indirection
1>wyznacznik.c(22): error C2065: 'tab_wsk' : undeclared identifier
1>wyznacznik.c(22): warning C4022: 'free' : pointer mismatch for actual parameter 1
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
To są błędy ze wskaźnikami i przekazywaniem argumentów do funkcji. Wynikają mojego z braku praktycznej wiedzy. Przepraszam za nie. Będę próbował to poprawić.
Liczę na jakieś naprowadzenie mnie. Nie do końca wiem jak zrobić żeby np. fscanf pominął '3' przy wypelnianiu tablicy ale pozostale liczby sobie ladnie wpisal.
Ostatnim razem pomogliście mi w pół godziny. Byłem w lekkim szoku, ale tamten program był prostszy.
Będę wdzięczny za wszelkie pomysły, wskazówki;)
Pozdrawiam