Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

sortowanie ,język C

Ostatnio zmodyfikowano 2017-11-28 11:26
Autor Wiadomość
Usurper
Temat założony przez niniejszego użytkownika
sortowanie ,język C
» 2017-11-28 10:27:35
Witam,mam problem z zadaniem

Dany jest plik wejściowy tekstowy o nazwie przechowywanej w zmiennej nazwa1. Każda linijka pliku zawiera jeden napis (jeden wyraz). Utworzyć plik tekstowy o nazwie pobranej ze zmiennej nazwa2. Plik ten powinien zawierać napisy z pliku wejściowego w kolejności od najkrótszych do najdłuższych (każdy napis w osobnej linii pliku wyjściowego). Napisy o jednakowej długości nie muszą być posortowane alfabetycznie. Długość każdej linii pliku nie przekracza MAX_L znaków. Zakładamy, że w pliku jest maksymalnie W napisów.

otóż nie wiem w jaki sposób te napisy uporządkować żeby były od najkrótszych do najdłuższych
kod:
#include <stdio.h>
#include <stdlib.h>


#define W 20
#define MAX_L 200






int main()
{
char wyraz[W][MAX_L];

int i;
char nazwa1[200];
printf("Podaj nazwe pliku do otwarcia:");
scanf("%s",nazwa1);

FILE * plik=fopen(nazwa1,"r");

char  nazwa2[200];
printf("Podaj nazwe nowego pliku do utworzenia :");
scanf("%s",nazwa2);
FILE * plik1=fopen(nazwa2,"w");


for(i=0;fscanf(plik,"%s",wyraz)==1;i++);


int zmienna;

do
{
    zmienna=0;
for(i=0;i<W;i++)
    if(strlen(wyraz)>strlen(wyraz[i+1]))
{
    zmienna++;
  char *x=wyraz;
    wyraz=wyraz[i+1];
    wyraz[i+1]=&x;
}
}while(zmienna!=0);
for(i=0;i<W;i++)
{
    fprintf(plik1,"%s\n",wyraz);
}









fclose(plik);
fclose(plik1);


    return 0;
}
P-167358
Anim
» 2017-11-28 11:26:57
Pierwsze pytanie, to czy parametry nazwa1, nazwa2 mają być pobierane z klawiatury? Dla plików to trochę głupie rozwiązanie. Zapewne chodzi o skorzystanie z argumentów przekazanych do funkcji main, czyli argc, argv[] <- to pierwsza sugestia :)


Druga jest taka - odczytuj dane z pierwszego pliku wierszami i zapisuj je do bufora (tablicy) - jeśli znasz od razu parametr W, to ustaw go na sztywno, jak nie, to powinieneś skorzystać z przydziału dynamicznego pamięci. Następnie, po skopiowaniu całego pliku do tablicy zaczyna się sortowanie. Tutaj masz duży wybór, bo metod sortowania jest od groma. Jednak skoro masz około 20-30 linijek w pliku to spokojnie możesz skorzystać z najprostszego sortowania bąbelkowego (proste dwie pętle for). Skoro masz sortować  po długości to kryterium porównawcze uzyskasz tak jak robisz, czyli wykorzystując funkcję strlen() :) I następnie, po posortowaniu  zapisujesz po kolei dane do nowego pliku.
P-167360
« 1 »
  Strona 1 z 1