Witam,
w poniższym kodzie chodziło mi o pobranie do tablicy dwuwymiarowej wartości charakterystycznych dla danego wektora. Zmienna liczba_el przedstawia przestrzeń w jakiej się poruszamy(ilość wymiarów). Odczytany wektor zostaje zapisany w kolejnych komórkach pierwszego wiersza tablicy wektor. Zmienna wektor2 typu double ma przechowywać w pierwszym wierszu kolejne wartości [0,1,2,...,n-1] w zależności od przestrzeni. Zmienna wektor3 ma przechowywać zsumowane odpowiednie wiersze wektora1 i wektora2. Kolejnym krokiem jest otwarcie pliku i odczyt kolejnego wektora a następnie porównanie odczytanego wektora z wektorem3 (sumą odpowiadających współrzędnych wektorów1 i 2). W zależności czy wektor odczytany (wektor4) jest identyczny jak wektor3 jest on nadpisywany do tego pliku lub nie.
Dodam jeszcze, że kolejne linie pliku, z którego wektory są odczytywane wyglądają następująco:
Pierwszy wiersz jedna komórka z liczbą wymiarów.
Drugi wiersz to kolejne wartości współrzędnych wektora w osobnych komórkach.
Pytanie rodzi się dlaczego program generując kolejne wartości dla wektora2 przypisywane są bardzo duże liczby (linie 42-45)? Kolejne pytanie związane z programem to dlaczego końcowe wartości nie zostają nadpisane skoro wektory (wekor3 i wektor3) się różnią. Ostatnie pytanie czy zamiast kolejnych zmiennych i,j,k sterujących pętlami nie lepiej jest korzystać tylko z jednej (np. i) a po wykonaniu pętli ją zerować, żeby móc wykorzystać ponownie?
Kod przedstawia się następująco:
#include <stdio.h>
#include <stdlib.h>
double compare(int ilosc_wsp,double *tab[1][ilosc_wsp], double *tab2[1][ilosc_wsp]){
int l=0,compatible=1;
for(l;l<=ilosc_wsp;l++){
if(tab[1][l]==tab2[1][l]){
}else{
compatible=0;
return 0;
}
}
if(compatible==1){
return 1;
}else{
return 0;
}
};
int main()
{
FILE *plik,*plik2;
int liczba_el,i=0,j=0,k=0;
plik=fopen("vec_in.csv","r");
if(plik==NULL){
printf("Blad otwarcia pliku.\n");
exit(1);
}else{
printf("Plik zrodlowy zostal otwarty.\nWartosci pobranego wektora: \n");
fscanf(plik,"%d",&liczba_el);
double wektor[1][liczba_el];
for(i;i<=liczba_el;i++){
fscanf(plik,"%d",&wektor[1][i]);
printf("%d \t",wektor[1][i]);
}
printf("\n");
fclose(plik);
double wektor2[1][liczba_el],wektor3[1][liczba_el],wektor4[1][liczba_el];
printf("Wartosci utworzonego wektora: \n");
for(j;j<=liczba_el;j++){
wektor2[1][j]=j;
printf("%d\t",wektor3[1][j]);
}
printf("\nWartosci po dodaniu wektorow:\n");
for(k;k<=liczba_el;k++){
wektor3[1][k]=wektor2[1][k]+wektor[1][k];
printf("%d\t",wektor3[1][k]);
}
printf("\n");
plik2=fopen("vec_sum.csv","r+");
if(plik2==NULL){
printf("Blad otwarcia pliku porownawczego.\n");
exit(1);
}else{
printf("Otworzono plik porownawczy.\nWektor z pliku porownawczego:\n");
i=0;
//nie wiem czy ma być
fscanf(plik,"%d",&liczba_el);
for(i;i<=liczba_el;i++){
fscanf(plik2,"%d",&wektor4[1][i]);
printf("%d \t",wektor4[1][i]);
}
i=0;
printf("\n");
//tworzenie wskaznikow
double *wek1,*wek2;
wek1=&wektor3[1][0];
wek2=&wektor4[1][0];
//wykorzystanie funkcji compare
if(compare(liczba_el,wek1,wek2)){
printf("Podane wektory sa takie same.\n");
}else{
printf("Podane wektory sa rozne.\nWektor zostal nadpisany.\n");
fprintf(plik2,"%d\n",liczba_el);
for(i;i<=liczba_el;i++){
fprintf(plik2,"%d ",wektor3[1][i]);
}
};
fclose(plik2);
}
}
return 0;
}