Programowanie C. Tworzenie tablicy znaków i sortowanie.

0

Cześć
Muszę stworzyć program w codeblocks do którego wprowadzamy tekst maks 40 lini a w lini maks 80 znaków
Jestem początkujący i nie ogaraniam jeszcze zbyt wiele.
Czy ktoś miałby pomysł jak mogę sobie z tym poradzić bądź gdzie najlepiej zdobyć wiedzę aby taki program stworzyć?
Poniżej to co sam próbuje stworzyć ale nie mam pomysłu na nic...
Może ktoś podrzuci jakąś lekturę?


```  #include <stdio.h>
#include <stdlib.h>
#define MAX_LINIA 80

struct Linia
{
    char Tekst[MAX_LINIA];
};

struct Lista
{
    struct Tekst Lini[40];
    int ilosc_lini
};

int main()
{
    
}
0

Wczytywanie do maks 80 znaków:

  • wczytaj całą linie i obetnij nadmiar
  • lub czytaj po jednym znaku na bieżąco sprawdzając długość

Lektura na początek:
C - Podstawowe procedury wejścia i wyjścia
C - Napisy

0

Potrzebuje pomocy w napisaniu kodu. Poniżej treść zadania.

Dane stanowią linie dowolnego tekstu, z których każdy zawiera słowa oddzielone spacjami (niekoniecznie pojedynczymi). Tekst może zawierać co najwyżej 40 linii po max. 80 znaków każda. Wynikiem programu powinny być linie tekstu poprzestawiane w/g malejącej średniej długości słowa w linii. Zastosować sortowanie metodą prostej zamiany przeprowadzone na wektorze indeksów.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Linia
{
char znaki [8]; // czy linia ma mieć maksymalną długość 7 znaków?
int dlugosc_slowa; // chyba chodzi o średnią długość słowa

};
struct Linie
{
struct Linia linie [4]; // czy linii ma być maksymalnie 4?
int liczba_lini;
};

void wczytywanieWszystkichLini (struct Linie *linie);
void wczytajLinie (struct Linia *linia);
void sortowanieLini (struct Linie *linie);

int main()
{
struct Linie linie;

wczytywanieWszystkichLini(&linie);	// ta funkcja ma wczytać wszystkie linie

// tu powinien Pan posortować linie - wywołując sortowanieLinii


// tu powinien Pan wyświetlić linie - wywołując wyswietWszystkieLinie funkcję tą trzeba napisać

}
void wczytywanieWszystkichLini(struct Linie *linie)
{
printf("Wczytywanie wszystkich lini\n");
printf("Podaj liczbe lini: ");
scanf("%d", &(linie->liczba_lini) );

for( int i=0 ; i < linie->liczba_lini; i++)
     wczytajLinie (&(linie->linie[i])) ;

}

void wczytajLinie (struct Linia *linia)
{
printf("Wczytywanie lini\n");
scanf("%s", (linia->znaki) );

// tu należy obliczyć średnią długość słowa w linii

}

void sortowanieLini(struct Linie *linie)
{
int min_idx;

for (int i = 0; i < linie->liczba_lini-1; i++)
{
    min_idx = i;
    for (int j = i+1; j < linie->liczba_lini; j++)
      if (linie->linie[j].dlugosc_slowa < linie->linie[min_idx].dlugosc_slowa)
        min_idx = j;

	// czy na pewno zawsze trzeba wykonać zamianę elementów?
	int temp = min_idx;
	min_idx = i;
	i = temp;

}

}

0

Dane stanowią linie dowolnego tekstu, z których każdy zawiera słowa oddzielone spacjami (niekoniecznie pojedynczymi). Tekst może zawierać co najwyżej 40 linii po max. 80 znaków każda. Wynikiem programu powinny być linie tekstu poprzestawiane w/g malejącej średniej długości słowa w linii.

Rozwiązanie w 72 znakach:

awk '{for(i=s=0;i++<NF;s+=length($i));$0=s/NF"\t"$0}1'|sort -nrs|cut -f2

Rozwiązanie w 68 znakach:

awk '{a=$0;b=NF;gsub(/ /,"");$0=length()/b"\t"a}1'|sort -nrs|cut -f2

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