Gość Opublikowano 21 Grudnia 2007 Zgłoś Opublikowano 21 Grudnia 2007 mam takie zadanie domowe ;) program ma wczytac jakies zdanie z pliku i poukladac wyrazy od najkrotszego do najdluzszego. sa na to jakies sprytne gotowe algorytmy? chce rozbic zdanie na wyrazy, kazdy wyraz jako oddzielna tablica(string) porwnac je ze soba i wyswietlic wynik. dobrze kombinuje? zeby nie bylo ze lamie regulamin i chce gotowca. nie oczekuje od was gotowego kodu wystarcza jakies podpowiedzi, kodowanie sam zalatwie. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 21 Grudnia 2007 Zgłoś Opublikowano 21 Grudnia 2007 Radix sort. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ziolek Opublikowano 25 Grudnia 2007 Zgłoś Opublikowano 25 Grudnia 2007 (edytowane) Pobierz wyrazy z pliku, wczytaj je do jakiejś tablicy wielowymiarowej. Następnie: google=>sortowanie bąbelkowe C=>zamień w ściągniętym kodzie nazwy tablic i znaki "==", ">", "<" na strcmp(), a znak "=" na strcpy() :) (opisu w/w funkcji szukaj też w googlach) Pozdrawiam. Edytowane 25 Grudnia 2007 przez ziolek Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 24 Stycznia 2008 Zgłoś Opublikowano 24 Stycznia 2008 dobra dzis o 16 musze oddac program problem jest przy szukaniu najdluzszego wyrazu(co by tablice zadeklarowac odpowiednia) w ogole to robi dziwne zeczy :/ np taki plik posortuje jakies zdanie co ma duzo wyrazow wiecej wyrazow tenwyrazjestcholerniedlugi a jak dodam kropke na koniec to juz nie :/ #include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <windows.h>#include <string.h>char **AllocateMemoryFor2DArray( int sizem, int sizen );void DestroyMemoryFrom2DArray(char **tab, int sizem, int sizen);int porownanie(char *tab, char *tab2);int main( void ){// deklaracja podwójnego wskaźnikachar **array,*tekst;char *tmp;int m, n,zmiana;int i, j; int k,l; //liczy slowa i wyrazyfpos_t d;//////////////////////////////FILE* f; // deklaracja wskaźnika na plikf = fopen( "input.txt", "rt" ); // otwarcie pliku // w - zapis do pliku // r - odczyt z pliku // a - dopisywanie do pliku // t - tryb tekstowy // b - tryb binarnyif( f == NULL ) { printf( "error :(\n" ); exit(-1); } fseek(f, 0, SEEK_END); fgetpos(f, &d); tekst=(char*) malloc(d*sizeof(char)); fseek(f, 0, 0); for(i=0;i<d;i++){ (tekst[i] = fgetc(f)) != EOF;}fclose(f);for(i=0;i<d;i++){printf("%c",tekst[i]);}k=0;for(i=0;i<d;i++){ if(tekst[i]==0x20 || tekst[i]==0x2e || tekst[i]==0x00) { k=k+1; }}//printf(" %d ",k);///////////////////////////////m = k; //liczba wyrazówl=0;k=0;for(i=0;i<d;i++){ if(tekst[i]==0x20 || tekst[i]==0x2e || tekst[i]==0x00) { if(l<k || l==k)l=k; k=0; }k++; }//--------------------------tu blad-----------------------------------------------n = l+2;// najwiekszy wyraz //nie wiem co robie zle, w kazdym razie musze dodac 2 do n zeby nie wyskoczyl blad systemowy przy uruchamianiu inaczej nie startuje w ogole.//---------------------koniec-----------------------------------------------------tmp=(char *) malloc(n*sizeof(char));//tablica do przechowywania porownywanego wyrazuif ( !tmp ) {printf("lipa\n");exit(0);}// wywołanie własnej funkcji alokującej pamięćarray = AllocateMemoryFor2DArray( m, n );for( i=0; i<m; i++ ){ for( j=0; j<n; j++ ){array[i][j] =0;}}system("pause");k=0;for( i=0; i<m; i++ ){ for( j=0; j<n; j++ ){ if(tekst[k]==0x20 || tekst[k]==0x2e || tekst[k]==0x00) j=n; else array[i][j] = tekst[k]; k++;}}//sortowaniedo {zmiana=0; i=m-1; do { i--; if (porownanie(array[i+1],array[i])==1) {for( j=0; j<n; j++ ) //kopiowanie{tmp[j]=array[i][j];array[i][j]=array[i+1][j];array[i+1][j]=tmp[j];} zmiana=1; } } while (i!=0); } while (zmiana!=0);for( i=0; i<m; i++ ){ printf("%d ",i); for( j=0; j<n; j++ ){printf("%c ",array[i][j]);}}f = fopen( "output.txt", "wt" ); // otwarcie pliku // w - zapis do pliku // r - odczyt z pliku // a - dopisywanie do pliku // t - tryb tekstowy // b - tryb binarnyif( f == NULL ) { printf( "error :(\n" ); exit(-1); }for( i=0; i<m; i++ ){for( j=0; j<n; j++ ){fprintf(f,"%c",array[i][j]);}fprintf(f,"\n");}fclose(f);DestroyMemoryFrom2DArray( array, m, n);free(tekst);free(tmp);system("pause");return 0;}int porownanie(char *tab, char *tab2){ if(strlen(tab)<strlen(tab2)) return -1; if(strlen(tab)==strlen(tab2)) return 0; if(strlen(tab)>strlen(tab2)) return 1; }char **AllocateMemoryFor2DArray( int sizem, int sizen ) //ta funkcje dostalem od prowadzacego{char **tab;int i;tab = (char **) malloc( sizem * sizeof(char) );if ( !tab ) {printf("unable to allocate memory\n");exit(0);}else{ // alokacja drugiego wymiarufor( i=0; i<sizem; i++ ){*(tab+i) = (char *) malloc(sizen*sizeof(char));if ( !*(tab+i) ){printf("unable to allocate memory\n");exit(0);}}}return tab;}voidDestroyMemoryFrom2DArray(char **tab, int sizem, int sizen) //ta tez dostalem{int i;for(i=0;i<sizem;i++) free( *(tab+i));free(tab);} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 24 Stycznia 2008 Zgłoś Opublikowano 24 Stycznia 2008 pare sugestii: 1) do sprawdzania czy slowo sie skonczylo uzywaj isalpha() lub jej mutacji http://www.cplusplus.com/reference/clibrar...pe/isalpha.html 2) pokaz, ze masz gest i uzyj zmiennych o nazwach dluzszych niz jedna litera, bo jak sie nie nauczysz poprawnie nazywac zmienne i/lub dodawac komentarze to kiepsko moze byc w przyszlosci Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 24 Stycznia 2008 Zgłoś Opublikowano 24 Stycznia 2008 z praktyki wynika, że najlepszy jest kod samokomentujący się :) a komentarzy tekstowych należy się wystrzegać jak ognia i dawać tylko tam gdzie coś wnoszą i są potrzebne. To taka sugestia, żeby nie popaść w komentalizm... :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 25 Stycznia 2008 Zgłoś Opublikowano 25 Stycznia 2008 koles w wymaganiach do zadania napisal ze duzo komentow powinno byc :P niby chodzi o to zeby pokazac ze umie sie je wstawiac ;) ale z tym isalpha(); to dobry pomysl, thx :) dobrze ze zmienil termin oddania to moge jeszcze poprawic :P Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 25 Stycznia 2008 Zgłoś Opublikowano 25 Stycznia 2008 ja wiem, w szkole uczą i każą pisać komentarze, potem w pracy okazuje się, że komentarze mogą bardziej zaszkodzić niż pomóc :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...