C - sortowanie liczb

Maro
2010-12-01 14:54
Maro
1

Program się kompiluje ale przy włączaniu jest: "Segmentation fault"

 #include <stdio.h>
main()
{
FILE *f;
int i,n,ilezmian=1,liczby[100];
f=fopen("dane","r");

while (!feof(f))
{
fscanf(f,"%d",&liczby[n]);
printf("%3d",liczby[n]);
n++;
}
while (ilezmian!=0)
{
ilezmian=0;
for(i=o;i<n;i++)
if (liczby[i+1]<liczby[i])
{
int tmp=liczby[i];
liczby[i]=liczby[i+1];
liczby[i+1]=tmp;
ilezmian++;
}
printf("Liczby posortowane rosnaco \n");
for (i=1;i<n;i++)
printf("%3d",liczby[i-1]);

printf("\n");
}

fclose(f);

return 0;
}

Pozostało 580 znaków

Maro
2010-12-01 15:01
Maro
0

tam w pętli for ma być i=0 zamiast i=o

Jeśli to naprawdę jest błąd, to.. sposoby na zrobienie buga mnie ciągle zaskakują. - msm 2010-12-01 16:27

Pozostało 580 znaków

2010-12-01 17:32

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

1

Zainicjalizuj zmienną n:

n = 0

Pozostało 580 znaków

2010-12-07 18:16

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Thx. A jak z tego zrobić sortowanie malejące?

Pozostało 580 znaków

2010-12-07 22:32

Rejestracja: 9 lat temu

Ostatnio: 1 rok temu

0
Maro369 napisał(a)

Thx. A jak z tego zrobić sortowanie malejące?

gdybyś sam napisał od początku program, który tu wkleiłeś nie zadawałbyś takich pytań. W jaki sposób dokonujesz decyzji czy dany wyraz ciągu jest większy od drugiego? Zrób to samo tylko z przeciwstawnym operatorem relacji.


"..."
"odp"
"qtMaster"

Pozostało 580 znaków

2010-12-08 00:16

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

No właśnie mam z tym problem, bo zmiana znaku w tym miejscu na przeciwny

if (liczby[i+1]<liczby[i])

nie pomaga.

Nie napisałem sam tego programu, bo nie potrafię, natomiast staram się zrozumieć jego działanie, co nie jest takie łatwe dla mnie początkującego, jak mogłoby się wydawać.

edytowany 2x, ostatnio: Maro369, 2010-12-08 00:18

Pozostało 580 znaków

2010-12-08 00:20

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0

Co nie jest latwe ? Wymysl sobie jakies liczby, zapisz na kartce i zasymuluj pokoleji na kartce kolejne kroki algorytmu, a potem juz z gorki.

Pozostało 580 znaków

2010-12-08 02:10

Rejestracja: 9 lat temu

Ostatnio: 1 rok temu

0

ściemniasz,

int i,n = 6,ilezmian=1,liczby[] = { 1, 2, 3, 4, 5, 6 };

    while (ilezmian!=0)
    {
        ilezmian=0;
        for(i=0;i<n-1;i++) // spojrz na warunek konca petli!
            if (liczby[i+1] > liczby[i]) // co zrobillem ze znakiem?
            {
                int tmp=liczby[i];
                liczby[i]=liczby[i+1];
                liczby[i+1]=tmp;
                ilezmian++;
            }
        printf("Liczby posortowane rosnaco \n");

        for (i=0;i<n;i++)
            printf("%3d",liczby[i]);
        printf("\n");
    }
  //  fclose(f);

mnie to działa, a zmieniłem tylko warunek... no dobra powiem szczerze jeszcze warunek pętli, dlaczego? Wychodziłeś poza zakres.


"..."
"odp"
"qtMaster"
edytowany 1x, ostatnio: matek3005, 2010-12-08 02:11

Pozostało 580 znaków

2010-12-08 12:39

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Ok, tylko ja chce wczytywać liczby z pliku (robie to tak jak w pierwszym poscie), więc inicjuje sobie tablicę np. liczby[100] i n=0 (tak jak przy sort. rosnącym) i wtedy dokładam do tego twój program i nie działa (tzn. znów jest sortowanie rosnące).
Poza tym na początku programu jak ma wyświetlać najpierw liczby tak jak są wpisane w pliku to samo dokłada mi na końcu jakąś liczbę.

Pozostało 580 znaków

2010-12-08 17:41

Rejestracja: 9 lat temu

Ostatnio: 1 rok temu

0
Maro napisał(a)

Program się kompiluje ale przy włączaniu jest: "Segmentation fault"


#include <stdio.h>
main()
{
FILE *f;
int i,n,ilezmian=1,liczby[100];
f=fopen("dane","r");

while (!feof(f))
{
fscanf(f,"%d",&liczby[n]);
printf("%3d",liczby[n]);
n++;
}
(...)


a ile wynosi "n" bo ja nie widzę, żebyś nadawał zmiennej n jakąś wartość początkową. Dostajesz liczbę "z kosmosu".

edit: sorry nie widziałem postu usera samadhi.

edit2: dopisałem do "twojego" kodu swoje zmiany bo aż byłem ciekaw twoich słów i mnie wszystko działa. Czyli sortuje rosnąca lub malejąco w zależności od warunku. Aha, pomyśl jeszcze nad tym: 
```cpp
for (i=1;i<n;i++)
printf("%3d",liczby[i-1]);

Ogólnie rzecz biorąc masz syf w kodzie i występują takie głupie błędy. Nie mam pojęcia dlaczego ja to w ogóle sprawdzam, powinieneś najsampierw wcięcia porobić, a potem powinniśmy porozmawiać.


"..."
"odp"
"qtMaster"
edytowany 3x, ostatnio: matek3005, 2010-12-08 17:53

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0