wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 WItam Mam problem z praca na zaliczenie i potrezbuje pomocy i to naprawde szybko:). Musze napisac program wczytujacy dane z pliku(kilkaset pozycji) i sortowanie ich a nastepnie wyswietlenie pososrtowanych danych w pliku. Wiem ze trezba operowac na tablichac. TYlko jak wczytac dane z pliku do tablicy i na nich operowac?? Z gory dziekuje za pomoc. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 1. REGULAMIN! 2. Gdzie byłeś cały semestr? 3. Czytaj jakiś kurs. Napisz kawałek i może wtedy pomożemy, jak będą problemy. 4. Jest pełno takich programów w sieci (np na stronach studentów informatyki) - szukaj a znajdziesz. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Napisałem kawałek program który ma za zadni czytac z plika zawierajacego 10 andych liczbowych ulozonych w kolumnie i ma za zadnie zapisaywac je do tablicy a;e kompletnie zle dziala.Prosze o porade jak to naprawic. #include<stdio.h> main() { FILE *plik_we; int i; double a[10]; plik_we=fopen("wyniki.txt","r"); i=0; while(!feof(plik_we)) { fscanf(plik_we,"%lf", &a); printf("\n"); printf("%d \n",a); i++; } fclose(plik_we); } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Hmm.. Zmieniłem %lf na %ld i już działa. Źródło: http://msdn.microsoft.com/library/default....2c_.fwscanf.asp Jak nie znasz składni lub potrzebujesz przykładu użycia funkcji, to możesz tam szukać. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 (edytowane) Dzieki , ale do konca nie jest jeszcze super. Liczbe 12 nie wczytuje mi poprawnie:( a jak mam zrobic aby wczytywac liczby zmiennoprzecinkowe? albo jak utorzyc tablce ktora bedzie tworzona dynamicznie pod ilosc danych w pliku. tzn np 320 danych liczbowych w pliku i tablica utpoworzy sie 320 elementowa? Z tej stronki nie moge niestey korzystac poniewaz zle mi ja wyswietla i literki sa za male i zupelnie nieczytelne. Wprowadzilem do jeszcze niezupelnei dobrego programu modol sortujacy aby elemty tej tablicy zostaly posortowane ale niestety nie dziala. #include<stdio.h> #include<conio.h> void swap(int a[], int i, int j); void Bubblesort(void) { int i,p,przestawienie,N=13; p=N-1; do { p--; przestawienie=0; /*wartość domyślna*/ for(i=0;i<=p;i++) if(*(a+i)>*(a+i+1)) { swap(a,i,i+1); przestawienie=1; } }while(przestawienie); } void swap(int a[], int i, int j) { int t; t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; } main() { FILE *plik_we; int i,k; double a[13]; plik_we=fopen("wyniki.txt","r"); i=0; while(!feof(plik_we)) { fscanf(plik_we,"%ld", &a[k]); i++; k++; } Bubblesort(); for(k=0;k<=13;k++) printf("%d ",a[k]); fclose(plik_we); getch(); } Edytowane 10 Czerwca 2005 przez wragler Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 (edytowane) OMG :mur: 1. Mi wczytuje każdą liczbę całkowitą. 2. Aby mieć dynamiczną tablicę, musiałbyś 2 razy przelatywać przez plik: raz przy zliczaniu elementow, potem utworzenie tablicy, potem drugi raz, aby wczytać. Ewentualnie użyć tablicy tymczasowej. 3. Ze stroną to mogę Ci zasugerować: - zmianę przeglądarki na FF - zwiększenie rozmiaru czcionki (każda przeglądarka ma taką opcję) - zmniejszenie rozdzielczości ekranu 4. Regulamin po raz drugi! Gdy podajesz kod, to w znacznikach PHP! 5. Z liczbami niecałkowitymi są 3 zmiany: PHP float a[10];.. fscanf(plik_we,"%f", &a); .. printf("%f \n",a); 6. Sortowanie: PHP void sortuj(int i_el, int *tab1){ int zmiana=0, temp, i; do { zmiana=0; for(i=1;i<i_el;i++) if(*(tab1+i-1)>*(tab1+i)) { temp=*(tab1+i); *(tab1+i)=*(tab1+i-1); *(tab1+i-1)=temp; zmiana++; } }while(zmiana>0); 1 parametr to rozmiar tablicy 2 parametr to wskaźnik tablicy do sortowania Edytowane 10 Czerwca 2005 przez ULLISSES Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Przepraszam za moja natarczywosc ale w jaki sposob moge zaadoptowac te sortowanie do moje programu . Przed wywolaniem funkcji main umieszczam przeslane przez Ciebie sortowanie w atkiej postacji jak zamiesciles w poscie? Juz w w funkcji main po wczytaniu i umieszczeniu danych z pliku w tablicy wywoluje funkcje sortowanie z parametrami 1- wielkosc tablicy, a drugi - tu za bardzo nie wiem o co chodzi:) - sorka za to ale w mojej szkole poziom nauczania nie jest za wysoki:).Z pomoc bede dozgonnie wdzieczny. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 nie trzeba przelatywac pliku 2x - wystarczy jako pierwsza pozycje w pliku umescic ilosc rekordow :] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 (edytowane) Są 3 sposoby: 1. Najlepszy - zmienić troche Twój program, aby działała tablica na wskaźnikach. 2. Najgorszy - wrzucic kod funkcji sortowania do main(). 3. Najbardziej odpowiedni - zrobić tablicę globalną i zmienić odwołania przez wskaźniki na odwołania proste. Wybierając sposób 3 mamy: 1. Po "inkludach" dodajesz: PHP float a[10]; Tablica staje się zmienną globalną (widzianą w całym programie). 2. Modyfikacja funkcji sortowania: PHP void sortuj(int i_el){ int zmiana=0, temp, i; do { zmiana=0; for(i=1;i<i_el;i++) if(tab1[i-1]>tab1) { temp=tab1; tab1=tab1[i-1]; tab1[i-1]=temp; zmiana++; } }while(zmiana>0); 2 parametr jest nie potrzebny, gdyż funkcja "widzi" tablicę. Funkcje bubble() i swap() są w tym momencie zbędne - zastąp je przez tą opisaną wyżej. @ayem: Ano, masz rację. Nie wyspałem się i myślę.. z przerwami :) Edytowane 10 Czerwca 2005 przez ULLISSES Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Widze ze mam do czynienia z Forumowiczami naparwde znajocymi sie na rzeczy. Ja sie czuje jednak bardzo glupio bo nie rozumiem do konca tego co mi napisaliscie.Ja zrobilem to tak - wiem ze to jest zle ale nie umiem sobie z tym poradzic.A jest jzu blisko, tak mi sie zdaje przynajmniej:).Napewno gdybym mial wiecej czasu to sam bym wiecej zrobil nic obecnie.Ale mam dostep tylko przez dwa dni do komputera i musze to zrobic do jutra...Mysle ze mnie zrozumiecie. :unsure: #include<stdio.h>#include<conio.h>float a[13];void sortuj(int i_el){int zmiana=0, temp, i;do{zmiana=0;for(i=1;i<i_el;i++)if(tab1[i-1]>tab1[i]){temp=tab1[i];tab1[i]=tab1[i-1];tab1[i-1]=temp;zmiana++;}}while(zmiana>0);main(){FILE *plik_we;int p;float a[13];plik_we=fopen("wyniki.txt","r");p=0;while(!feof(plik_we)){fscanf(plik_we,"%f", &a[p]);sortuj(13);printf("\n");printf("%f \n",a[p]);p++;}fclose(plik_we);getch();} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Artur.M Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Moge ci dać kod jeżeli liczbymogą być zapisane w pliku binarnym (nie z rozszeżeniem *.txt tylko *.dat ) i pierwsza liczba to będzie ilość liczb w pliku. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 (edytowane) Sorki... Zgubiłem coś - po: PHP }while(zmiana>0); powinien być jeszcze 1 nawias zamykający (klamrowy): } No i sortowanie trzeba wywołać po wczytaniu tablicy w main(): PHP sortuj(x); Gdzie x to liczba elementów tablicy. A potem jeszcze raz samo wyświetlanie elementów tablicy w pętli. BTW: Gotowce to nie jest sposób na naukę... Edytowane 10 Czerwca 2005 przez ULLISSES Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 (edytowane) Program juz prawie dziala tylko ze zle sortuje a praktycznie to wcale nie ortuje , poajwiaja sie jakies glopoty.Ale jeszcze jedna podpowiedz i mysle ze program bedzie smigac:) Nie wiem czy dobrze zrobilem ale w funkcji sortowania byla niezadeklarowna zmienna tab1 i zamienialem ja na zmienna tablicy a[].Pozaatym nie wiem czy miejsce wstawienia funcji sortuj w mainie jest dobre>.. #include<stdio.h>#include<conio.h>float a[13];void sortuj(int i_el){int zmiana=0, temp, i;do{zmiana=0;for(i=1;i<i_el;i++)if(a[i-1]>a[i]){temp=a[i];a[i]=a[i-1];a[i-1]=temp;zmiana++;}}while(zmiana>0);}main(){FILE *plik_we;int p;plik_we=fopen("wyniki.txt","r");p=0;while(!feof(plik_we)){fscanf(plik_we,"%f", &a[p]);sortuj(13);printf("\n");printf("%f \n",a[p]);p++;}fclose(plik_we);getch();} Edytowane 10 Czerwca 2005 przez wragler Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Moge ci dać kod jeżeli liczbymogą być zapisane w pliku binarnym (nie z rozszeżeniem *.txt tylko *.dat ) i pierwsza liczba to będzie ilość liczb w pliku. 1490628[/snapback] Taki program tez by mi sie przydal, ale ten z ktorym pomaga mi ULLISSES tez skoncze. Pozdrawiam Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 (edytowane) 1. Sortujesz liczby niecałkowite, a zmienna temp jest typu całkowitego. 2. Sortuj nie może sie wykonywać przed załadowaniem całej tablicy, a tym bardziej w pętli. 3. Powinno być: #include<stdio.h>#include<conio.h>float a[13];void sortuj(int i_el){int zmiana=0, i;float temp;do{zmiana=0;for(i=1;i<i_el;i++)if(a[i-1]>a[i]){temp=a[i];a[i]=a[i-1];a[i-1]=temp;zmiana++;}}while(zmiana>0);}main(){FILE *plik_we;int p;plik_we=fopen("wyniki.txt","r");p=0;printf("Tablica załadowana:\n");while(!feof(plik_we)){fscanf(plik_we,"%f", &a[p]);printf("\n");printf("%f \n",a[p]);p++;}fclose(plik_we);sortuj(13);printf("Tablica posortowana:\n");for(p=0,p<13;p++)printf("%f \n",a[p]);getch();} Lekka modyfikacja, która czyta z 1 wiersza ilość liczb wpisywanych do tablicy: main(){FILE *plik_we;int p, n;plik_we=fopen("wyniki.txt","r");fscanf(plik_we,"%f", n);printf("Tablica załadowana:\n");for(p=0;p<n;p++){fscanf(plik_we,"%f", &a[p]);printf("\n");printf("%f \n",a[p]);}fclose(plik_we);sortuj(n);printf("Tablica posortowana:\n");for(p=0,p<n;p++)printf("%f \n",a[p]);getch();} BTW: Używam CODE, bo PHP i tak nie koloruje składni.. :| Edytowane 10 Czerwca 2005 przez ULLISSES Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 1. Sortujesz liczby niecałkowite, a zmienna temp jest typu całkowitego. 2. Sortuj nie może sie wykonywać przed załadowaniem całej tablicy, a tym bardziej w pętli. 3. Powinno być: #include<stdio.h>#include<conio.h>float a[13];void sortuj(int i_el){int zmiana=0, i;float temp;do{zmiana=0;for(i=1;i<i_el;i++)if(a[i-1]>a[i]){temp=a[i];a[i]=a[i-1];a[i-1]=temp;zmiana++;}}while(zmiana>0);}main(){FILE *plik_we;int p;plik_we=fopen("wyniki.txt","r");p=0;printf("Tablica załadowana:\n");while(!feof(plik_we)){fscanf(plik_we,"%f", &a[p]);printf("\n");printf("%f \n",a[p]);p++;}fclose(plik_we);sortuj(13);printf("Tablica posortowana:\n");for(p=0,p<13;p++)printf("%f \n",a[p]);getch();} Lekka modyfikacja, która czyta z 1 wiersza ilość liczb wpisywanych do tablicy: main(){FILE *plik_we;int p, n;plik_we=fopen("wyniki.txt","r");fscanf(plik_we,"%f", n);printf("Tablica załadowana:\n");for(p=0;p<n;p++){fscanf(plik_we,"%f", &a[p]);printf("\n");printf("%f \n",a[p]);}fclose(plik_we);sortuj(n);printf("Tablica posortowana:\n");for(p=0,p<n;p++)printf("%f \n",a[p]);getch();} BTW: Używam CODE, bo PHP i tak nie koloruje składni.. :| 1490808[/snapback] Dziekuje bardzo program dziala!!! Jeszcze tylko wczytanie tych danych do pliku ale z tymn mysle ze sobie sam poradze. Naprawde jeste bardzo wdzieczny. Jeszcze raz dziekuje za pomoc i pozdrawiam Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 1. Na przyszłość nie cytuj całego posta (gdy jest tak długi). 2. Jak będziesz pisał, to zwracaj uwagę na typy zmiennych, których używasz oraz literówki. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 10 Czerwca 2005 Zgłoś Opublikowano 10 Czerwca 2005 Program dziala, i po moich lekkich modyfikachach zapisuje do pliku. Ale zawiesza mi sie dla tablicy o 41 elementach. Tablica jest dosc dluga ale ja tutaj zamieszcze: 350,5736 0,700255810,9877 6,31389360,5878 0,726554 820,9903 7,11548370,6018 0,753653 830,9925 8,14437380,6157 0,781352 840,9945 9,5144 6390,6293 0,809851 850,9962 11,43015400,6428 0,839150860,9976 14,30074410,6561 0,869349 870,9986 19,08113420,6691 0,900448 880,9994 28,63632430,6820 0,932547 890,9998 57,29001440,6947 0,965746 901,0000 450,7071 1,000045A oto program narzie w wersji bez odczytywania ilosci danych.: #include<stdio.h>#include<conio.h>float a[41];void sortuj(int i_el){int zmiana=0, i;float temp;do{zmiana=0;for(i=1;i<i_el;i++)if(a[i-1]>a[i]){temp=a[i];a[i]=a[i-1];a[i-1]=temp;zmiana++;}}while(zmiana>0);}main(){FILE *plik_we;FILE *plik_wy;int p;plik_we=fopen("wyniki.txt","r");p=0;printf("Tablica załadowana:\n");while(!feof(plik_we)){fscanf(plik_we,"%f", &a[p]);printf("\n");printf("%f \n",a[p]);p++;}fclose(plik_we);plik_wy=fopen("wynikipos.txt","w");sortuj(41);printf("Tablica posortowana i zapisana do pliku \n");for(p=0;p<41;p++)fprintf(plik_wy,"%f \n",a[p]);fclose(plik_wy);getch();} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...