Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: problema siruri de caractere  (Citit de 4523 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« : Iunie 07, 2009, 20:23:55 »

Am o problema care imi da batai de cap.
Spune asa:



Un elev din clasa 1 are la dispozitie n litere mici ale alfabetului latin,din care m distincte.Doamna invatatoare ii cere urmatoarele lucruri:

a)Sa verifice daca exista litere care apar de mai multe ori si sa pastreze toate literele distincte o singura data.
b)Sa aseze aceste litere in ordine alfabetica.

Ex:

n=6
a,b,a,d,c,c

a) a,b,d,c
b)a,b,c,d

Am incercat mai multe metode:

s: a,b,a,d,c,c
s1=ceea ce trebuie sa apara
Cod:
i=0,strlen(s)
j=0,stlen(s)
if (s[i]<s[j])
   {
    aux=s[i];
    s[i]=s[j];
    s[j]=s[i];
    } //am ordonat s->>apare a,a,b,c,c,d

//mai departe vreau sa pun in s2 fiecare litera o singura data
i=0
executa
    {
     daca (s[i]==s[i+1])
        {
         s2[i]=s[i];
          i+=2;
         }
       altfel
            {
             s2[i]=s[i];
             ++i;
              }
     atata timp cat (i<strlen(s2); //strlen(s2) am dat de la inceput 4
//afisez s2


Ar trebui sa-mi apara a,b,c,d. Apare numai a. Am inlocuit acel "executa...atat timp cat" (do..while din C) cu while.La fel.
Ce am gresit? Imi puteti spune unde esueaza codul meu? Sau da-ti-mi alta solutie... Huh
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #1 : Iunie 07, 2009, 20:46:17 »

Sincer, nu m-am pus sa inteleg ce faci acolo, dar iti pot da alta idee. Citesti caracter cu caracter, si iti ti un vector sol in care retii sol[ i ] = 1 daca ai intalnit litera i (adik c-'a'+1, unde c e caracterul citit) si sol[ i ] = 0 daca nu ai intalnit-o. Si la final parcuri vectorul sol[  ] si daca sol[ i ] == 1 afisezi char(i+'a'-1). Trebuie sa ai sol[27], adica cate caractere pot aparea.  Smile
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #2 : Iunie 07, 2009, 21:00:01 »

M-ai cam bagat in ceata cu c-'a'+1 si cu i+'a'-1...
Poti,te rog, sa implemetezi in pseudocod ideea? Aha
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #3 : Iunie 07, 2009, 21:10:29 »

Cod:
int viz[26] //verific daca acel caracter a mai aparut pana acu
//a)
for(int i = 0; i < strlen(S); ++i)
    if(viz[S[i] - 'A'] == 0)
    {
        viz[S[i] - 'A'] = 1
        printf("%c",S[i]);
    }
//b)
for(int i = 0; i < 26; ++i)
    if(viz[i])
        printf("%c",i+'A');
Ceva de genu asta ar arata, daca am inteles io bine enuntu
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #4 : Iunie 07, 2009, 21:18:16 »

Multumesc pentru interventie,Mishu! Very Happy Treaba e ca merge,afiseaza a,b,c,d dar apoi afiseaza si alfabetul cu majuscule ABCD...etc.



Nu ma prind,de ce? Eh?
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #5 : Iunie 07, 2009, 21:37:58 »

Daca vrei sa lucrezi cu litere mici, schimba i - 'A' in i - 'a' si i + 'A' in i + 'a', pentru ca cele doua caractere au coduri ASCII diferite.
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #6 : Iunie 07, 2009, 22:01:39 »

Mersi Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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