Witam
Mam do was pytanie i mam nadzieję że będziecie mi w stanie pomóc... W jaki sposób za pomocą języka C mogę zrobić zczytywanie macierzy ala Matlab czyli dokładniej rzecz ujmując:
w konsoli programu wpisujemy [ 1 2 3; 3 4 5 ; 5 6 7] i z tego otrzymujemy tablice 2 wymarową:
1 2 3
3 4 5
5 6 7
Mój sposób nie jest ani optymalny ani dokładny :(
GML
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
#define W 1000
int wczytaj()
{
int i=0 , j=0 , lock=0, wiersze=0;
int znaki=0 , wyraz=0 , send_wiersze=0;
int send_wyraz=0;
float a[N][N];
char ci[W];
char c;
printf("\n\n>>");
while(i < N)
{
c = getch();
printf("%c",c);
if(c==13)
{
break; // wyjście z pętli
}
else if(c==8 && znaki>0) //Backspace - poprawa ostatniej liczby niestety tylko ostatniej :(
{
printf(" %c",8);
znaki--;
}
else if(c>='0' && c<='9'|| c=='.' || c=='-') //zczytywanie tylko cyfr i "." "-"
{
ci[znaki] = c; //Znak ląduje do stringu
znaki++;
i++;
}
else if( c==';' )
{
if(znaki==0) // zabezpieczenie gdy mamy [3 4; 5 6_; 3 4] gdyż zczytywało spację "6_;" jako kolejny wyraz ( "_" - spacja )
{
if(wyraz!=0)
{
wyraz-=1;
}
}
if(lock==0) //Moja dziwna blokada ilosci elementów kolejnych wierszy
{
send_wyraz = wyraz;
}
if(send_wyraz != wyraz && lock==1)
{
printf("Blad w liczbie wierszy!");
system("pause");
return -1;
}
if(znaki!=0) // w razie gdy użytkownik wpisze "6;" ma nastąpić dodanie elementu do tablicy "a"
{
sscanf(ci, "%f", &a[wiersze][wyraz]);
//printf("a= %.2f ",a[wiersze][wyraz]);
}
wiersze++;
//printf("w= %d ",wiersze);
ci[znaki]=' ';
for(j=0; j<=wyraz; j++) // zapełnienie wiersza zerami
{
a[wiersze][j]=0;
}
lock=1;
wyraz=0;
i++;
znaki=0;
}
else if(c==' ') //po wciśnięciu spacji
{
if(znaki!=0) // gdy istnieją jakieś cyfry
{
ci[znaki]=' ';
sscanf(ci, "%f", &a[wiersze][wyraz]); //dodaj do tablicy "a" kolejny element
// printf("a= %.2f ",a[wiersze][wyraz]);
i++;
znaki=0;
wyraz++;
}
}
else
{
printf(" ");
}
}
macierz_podaj(wiersze+1,send_wyraz+1,a); // wysłanie ilości wierszy i kolumn wraz z tablicą "a"
return 0;
}
Naprawdę będę bardzo wdzięczny za pomoc :)
Pozdro Danon :)