Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Afisare linii in ordine inversa  (Citit de 6284 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
cuser
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« : Noiembrie 16, 2013, 00:27:09 »

Salutare! Am o problema in C care imi da ceva bataie de cap. Am o lista simplu inlantuita care contine cuvinte pe mai multe linii. Trebuie sa printez liniile in ordine inversa, fara a folosi arrays.
De exemplu:
Ana
are
mere.

mere
are
Ana

Ceva idei?

Multumesc anticipat!
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #1 : Noiembrie 16, 2013, 01:42:27 »

presupunand ca lista ta arata asa:
Cod:
struct list {
  list *nxt;
  char s[105];
};

as face asa:
Cod:
void print(list *node) {
  if(node->nxt!=NULL) print(node->nxt);
  printf("%s\n",node->s);
}
Memorat
cuser
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #2 : Noiembrie 16, 2013, 01:54:51 »

Petru, multumesc frumos. Insa metoda respectiva printeaza lista in ordine inversa. Cu alte cuvinte:

Ana
are
mere

devine
erem
era
ana
.

Output-ul meu ar trebui sa arate asa:
mere
are
Ana
.

Lista mea arata asa:
Cod:
typedef struct list{
  char val;
  struct list *next;
} item;
si trebuie sa citesc caracterele folosind getchar();.
Imi cer scuze daca la inceput m-am exprimat gresit.
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #3 : Noiembrie 16, 2013, 12:10:28 »

eu in fiecare nod din lista stochez un cuvant deci afisarea e cum ai cerut
Memorat
cuser
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #4 : Noiembrie 16, 2013, 13:37:59 »

Cum fac asta fara a folosi arrays?
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #5 : Noiembrie 16, 2013, 14:04:51 »

Ai putea incerca sa memorezi fiecare caracter intr-un element al listei ( inclusiv caracterul '\n' )
Memorat
cuser
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #6 : Noiembrie 16, 2013, 14:10:09 »

Razvan, asta am reusit. Am incercat sa retin toti pointer-ii catre "\n" sau "NULL" si sa printez pornind de la ei, insa nu afiseaza decat ultima linie, apoi se blocheaza.
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #7 : Noiembrie 16, 2013, 14:29:53 »

Cod:
# include <cstdio>

struct lista
{
    char a;
    lista * next;
};

lista *prim, *ultim;
char x;

void Adaug()
{
    lista * nou = new lista;
    nou->a = x;
    nou->next = NULL;
    if( prim == NULL )
        prim = ultim = nou;
    else
    {
        ultim->next = nou;
        ultim = ultim->next;
    }
}

void Citire()
{
    x=getchar();
    while( x != '.' )
    {
        Adaug();
        x=getchar();
    }
}

void Tipar( lista * p )
{
    for( ; p && p->a != '\n' && p->a != '#' ; p=p->next )
        putchar(p->a);
    putchar('\n');
}

lista * Cauta()
{
    lista *line = NULL;
    for( lista * i = prim ; i ; i=i->next )
        if( i->a == '\n' )
            line = i;
    return line;
}

int main()
{
    lista* x;
    Citire();
    while( (x=Cauta()) )
    {
        x->a = '#';
        Tipar(x->next);
    }
    Tipar(prim);
    return 0;
}


Caracterele se introduc in lista pana la intalnirea caracterului caracterelul '.''

Sper sa te ajute. Smile
Spune-mi daca nu intelegi ceva Thumb up
« Ultima modificare: Noiembrie 16, 2013, 14:40:27 de către Birisan Razvan » Memorat
cuser
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #8 : Noiembrie 16, 2013, 14:36:46 »

Multumesc frumos! O sa-l modific putin, totusi. Trebuie folosesc alta structura repetitiva in loc de for. O sa folosesc while. Multumesc inca o data!
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines