Hej mam problem z programem bo wyskakuje mi blad w funkcji shell sort nie wiem co jest zle Prosze o pomoc nie wiece rowniez jak policzyc wyrazy w pliku ?
http://4programmers.net/Pastebin/3506
- Rejestracja:ponad 10 lat
- Ostatnio:około 10 lat
- Postów:21
0

- Rejestracja:ponad 10 lat
- Ostatnio:ponad 8 lat
- Lokalizacja:Biała
- Postów:29
0
int result = 0, /* wynik funkcji we/wy */
i = 0, /* indeks wyrazu (licznik pętli) */
n = 0, /* liczba wczytanych wyrazów */
len = 0;
za i oraz n nie powinno być średników ?

_13th_Dragon
nie, nie powinno. @lisu1411 mam dla ciebie radę, jak najdzie cię chęć coś wpisać na forum - wklej tu: http://ideone.com/ i sprawdź.
- Rejestracja:ponad 10 lat
- Ostatnio:około 10 lat
- Postów:21
0
Tresc zadania polega na tym aby tekst z pliku zrodlowego posortowac metoda shella i zapisac go w pliku docelowym.
wychodzi mi taki blad przy kompilacji
ja.c: In function 'shellsort':
ja.c:97:8: warning: assignment makes integer from pointer without a cast [enabled by default]
edytowany 1x, ostatnio: michalukwerka

- Rejestracja:ponad 19 lat
- Ostatnio:2 miesiące
0
Ok teraz wklej sformatowany kod i zobaczymy co da się zrobić.
jak go sformatowac?
- Rejestracja:ponad 10 lat
- Ostatnio:około 10 lat
- Postów:21
0
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* zmienne globalne */
char srcfname[512], /* nazwa pliku zrodlowego */
dstfname[512]; /* nazwa pliku docelowego */
FILE *srcf=NULL, *dstf=NULL; /* uchwyty plikow (tekstowych) */
#define MAX 65536 /* maksymalna liczba wyrazow w pliku */
char *tab[MAX]; /* tablica wskaznikow do wczytanych wyrazow */
void shellsort();
int main(int argc, char *argv[])
{ /* zmienne lokalne funkcji main */
int result = 0, /* wynik funkcji we/wy */
i = 0, /* indeks wyrazu (licznik pętli) */
n = 0, /* liczba wczytanych wyrazów */
len = 0;
char buf[1024]; /* tymczasowy bufor na lancuch znakow - wyraz */
sscanf(argv[1], "%s", srcfname);
printf("\nPorzadkowanie wyrazow.");
srcf = fopen(srcfname,"rt");
if (fopen(srcfname,"rt")==0)
{
printf("\nWprowadz prawidlowe dane");
goto exit;
}
if (sscanf==0)
{ printf ("\nNie moge otworzyc pliku: %s", srcfname);
goto exit;
}
sscanf(argv[2], "%s", dstfname);
dstf = fopen(dstfname,"wt");
if (dstf==NULL)
{ printf ("\nNie moge utworzyc pliku: %s", dstfname);
goto exit;
}
printf("\nCzytam dane z pliku: %s", srcfname);
/* czytaj wyrazy, alokuj pamiec, zapisz adres wyrazu w tablicy tab */
for (n=0; n<MAX; n++)
{ result = fscanf(srcf, "%1023s", buf);
if ( result == 0)
{ printf ("\nNieoczekiwany blad przy czytaniu z pliku: %s", dstfname);
goto exit;
}
if (result == EOF) break;
len = strlen(buf);
tab[n] = (char *)malloc(len+1);
if (tab[n]==0) goto exit;
strcpy(tab[n], buf);
}
printf("\nSortuję wyrazy");
shellsort( tab, n);
/* zapisz wynik w pliku docelowym */
for (i =0; i<n; i++)
{
result = fprintf (dstf, "%s\n", tab[i]);
if (result<0)
{ printf ("\nBlad przy zapisie do pliku : %s", dstfname);
goto exit;
}
}
/* powiadom uzytkownika, że skonczyles */
printf("\nWynik porzadkowania wyrazow w pliku: %s\n", dstfname);
exit:
/* zwolnij pamiec, do ktorej wczytywales wyrazy; zamknij pliki */
for (i=0; i<n; i++) free(tab[i]);
if (srcf) fclose (srcf);
if (dstf) fclose (dstf);
return 0;
}
void shellsort(char **t, int n)
{
int gap; /* odstep pomiedzy porownywanymi elementami */
int i, j, tmp;
n=28;
for (gap= n/2; gap > 0; gap/= 2)
{
for (i= gap; i < n; ++i) /* wzdluz elementow tablicy */ {
/* porownywanie pary elementow oddalonych od siebie o "gap" */
for (j= i-gap; j >= 0; j-= gap)
{
if (strcmp(t[j],t[j+1]) < 0)
{
tmp= t[j];
t[j]= t[j+gap];
t[j+gap]= tmp;
} } }
} }
edytowany 1x, ostatnio: michalukwerka

- Rejestracja:ponad 19 lat
- Ostatnio:2 miesiące
0
Poczytaj jeszcze raz na czym polega formatowanie kodu i powiedz czy to:
michalukwerka napisał(a):
} } }
} }
ma cokolwiek wspólnego z formatowaniem?
- Rejestracja:ponad 10 lat
- Ostatnio:około 10 lat
- Postów:21
0
No tak przepraszam :)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* zmienne globalne */
char srcfname[512], /* nazwa pliku zrodlowego */
dstfname[512]; /* nazwa pliku docelowego */
FILE *srcf=NULL, *dstf=NULL; /* uchwyty plikow (tekstowych) */
#define MAX 65536 /* maksymalna liczba wyrazow w pliku */
char *tab[MAX]; /* tablica wskaznikow do wczytanych wyrazow */
void shellsort();
int main(int argc, char *argv[])
{ /* zmienne lokalne funkcji main */
int result = 0, /* wynik funkcji we/wy */
i = 0, /* indeks wyrazu (licznik petli) */
n = 0, /* liczba wczytanych wyrazow */
len = 0;
char buf[1024]; /* tymczasowy bufor na lancuch znakow - wyraz */
sscanf(argv[1], "%s", srcfname);
printf("\nPorzadkowanie wyrazow.");
srcf = fopen(srcfname,"rt");
if (fopen(srcfname,"rt")==0)
{
printf("\nWprowadz prawidlowe dane");
goto exit;
}
if (sscanf==0)
{ printf ("\nNie moge otworzyc pliku: %s", srcfname);
goto exit;
}
sscanf(argv[2], "%s", dstfname);
dstf = fopen(dstfname,"wt");
if (dstf==NULL)
{ printf ("\nNie moge utworzyc pliku: %s", dstfname);
goto exit;
}
/* czytaj wyrazy, alokuj pamiec, zapisz adres wyrazu w tablicy tab */
for (n=0; n<MAX; n++)
{ result = fscanf(srcf, "%1023s", buf);
if ( result == 0)
{ printf ("\nNieoczekiwany blad przy czytaniu z pliku: %s", dstfname);
goto exit;
}
if (result == EOF) break;
len = strlen(buf);
tab[n] = (char *)malloc(len+1);
if (tab[n]==0) goto exit;
strcpy(tab[n], buf);
}
shellsort(buf, n);
/* zapisz wynik w pliku docelowym */
for (i =0; i<n; i++)
{
result = fprintf (dstf, "%s\n", tab[i]);
if (result<0)
{ printf ("\nBlad przy zapisie do pliku : %s", dstfname);
goto exit;
}
}
/* powiadom uzytkownika, że skonczyles */
exit:
/* zwolnij pamiec, do ktorej wczytywales wyrazy; zamknij pliki */
for (i=0; i<n; i++) free(tab[i]);
if (srcf) fclose (srcf);
if (dstf) fclose (dstf);
return 0;
}
void shellsort(char *tab, int n)
{
int gap; /* odstep pomiedzy porownywanymi elementami */
int i, j, tmp;
n=28;
for (gap= n/2; gap > 0; gap/= 2)
{
for (i= gap; i < n; ++i) /* wzdluz elementow tablicy */
{
/* porownywanie pary elementow oddalonych od siebie o "gap" */
for (j= i-gap; j >= 0; j-= gap)
{
if (tab[j] > tab[j+gap])
{
tmp= tab[j];
tab[j]= tab[j+gap];
tab[j+gap]= tmp;
}
}
}
}
}
edytowany 2x, ostatnio: michalukwerka

- Rejestracja:ponad 19 lat
- Ostatnio:2 miesiące
0
Jeszcze raz poczytaj o formatowaniu - bo nie zrozumiałeś.
Zapoznaj się z funkcją exit()
Zapoznaj się z koncepcją: - prototyp funkcji
- jak zrozumiesz na czym polega to znajdziesz błąd.
czyli moja funkcja nie powinna miec typu void bo wtedy nic nie zwraca i jest prototypem ?

Co ma zwracanie do prototypu? Twoje pytanie brzmi jak jakieś majaczenie. Poczytaj jednak o
prototypach
czasami to się nazywa zwyczajnie deklaracja funkcji
(nie mylić z definicją
)
czyli blad jest tutaj
void shellsort(); ?

Akurat ten przy takim bezsensownym formatowaniu już jest widoczny, reszty nie chcę mi się czytać (sądzę że innym też) w związku z bezsensownym formatowaniem oraz bajzlem w kodzie.