Welcome, Guest. Please login or register.

Autor Subiect: probleme in C  (Citit de 7100 ori)

0 Membri şi 1 Vizitator vizualizează acest subiect.

automat

  • Vizitator
probleme in C
« : Februarie 29, 2012, 09:14:18 p.m. »
Salut!
Sunt incepator si am nevoie de putin ajutor. Multumesc.


1. Sa se afiseze primele n numere care au suma cifrelor mai mica sau egala cu m.
// Imi afiseaza numerele care au suma cifrelor mai mica decat un m dat, dar problema este ca imi afiseaza mult mai multe decat ar trebui, de exemplu daca n=10, ar trebui sa imi afiseze 10 numere care indeplinesc conditia suma cifrelor mai mica sau egala cu m.

#include<stdio.h>

int main()
{
    int c, m, n, p, s, i, j, A;
    printf("\n Dati n = ");
    scanf("%d", &n);
    printf("\n Dati m = ");
    scanf("%d", &m);
    printf("\n");
    for(i=1; i<=n; i++)
       {
          p=i; s=0;
          while(p)
       {
         A=p%10;
         s+=A;
         p/=10;
         n++;
       }
       c=0;
       if(s<=m)
         {
             printf(" %d", i);
             c++;
         }
    }
    printf("\n");
}

2. Care este cifra de pe pozitia k, daca se aseaza unul dupa altul numerele 1, 2, 3,
Ex. Cifra de pe pozitia 20 este 1 (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)

Ok.
Asa am facut dar din pacate nu e bine :

 count=0;
 for(i=1; i<=k; i++)
 p=i;
 while(p)
 {
     m=p%10;
     k++;
     p/=10;
 }
  if(d==k)
  {
      printf("\n Cifra de pe pozitia %d este %d!\n", k, d);
      return 0;
}

Offline tavy

  • Experimentat
  • ***
  • Mesaje postate: 544
  • Popularitate: +26/-26
Răspuns: probleme in C
« Răspuns #1 : Februarie 29, 2012, 09:39:05 p.m. »
#include<stdio.h>

int main()
{
  int c, m, n, p, s, i, j, A;
  printf("\n Dati n = ");
  scanf("%d", &n);
  printf("\n Dati m = ");
  scanf("%d", &m);
  printf("\n");
  for(i=1; i<=n; i++){
    p=i; s=0;
    while(p){
      A=p%10;
      s+=A;
      p/=10;
      n++; /* Aici il tot modifici pe n, putine sanse ca conditia i<=n sa nu mai fie satisfacuta iar bucla for sa se termine */
    }
    c=0;
    if(s<=m){
      printf(" %d", i);
      c++;
    }
  }
  printf("\n");
}

Nu ar fi rău dacă ai încerca să descrii înainte algoritmul, așa cum l-ai gândit tu, asta ne-ar ajuta să înțelegem ce ai vrut să faci și să găsim mai ușor greșelile.
Nu ar strica nici să inserezi ceva comentarii prin cod prin care să explici ce încerci să faci, astfel ar fi mai ușor de urmărit algoritmul, unde mai pui că sunt mari șanse ca dacă faci lucrul ăsta să găsești chiar tu greșelile.
Nu în ultimul rând, dacă consideri că ai rezolvat problema, nu ar strica să ne dai și nouă codul final să ne uităm pe el și să-ți zicem dacă găsim cazuri pe care nu se comportă conform cerințelor.

automat

  • Vizitator
Răspuns: probleme in C
« Răspuns #2 : Februarie 29, 2012, 11:24:09 p.m. »
Scuze Tavy ai dreptate.

 Sa se afiseze primele n numere care au suma cifrelor mai mica sau egala cu m.
 Ex: n=10 m=4 
      Cele 10 numere a caror suma a digitilor este mai mica sau egala cu 4 sunt : 1, 2, 3, 4, 10, 11, 12, 13, 20, 21.

 Observatii : problema nu este rezolvata, ce anume nu am reusit : in primul rand cred ca afisarea celor n numere ar trebui facuta folosind o procedura while sau do while, si asta datorita
 numarului necunoscut de iterari, ceea ce nu am reusit.
 Astept sfaturi. Multumesc.

#include<stdio.h>

int main()
{
   int c, m, n, p, s, i, j, A;
   printf("\n Dati n = ");
   scanf("%d", &n);
   printf("\n Dati m = ");
   scanf("%d", &m);
   printf("\n");
   c=0;
   for(i=1; i<=n; i++)
    {
        p=i; s=0;
        while(p)
        {
           A=p%10;     
           s+=A;       // calculez suma digitilor
           p/=10;
        }
        if(s<=m)
        {
            printf(" %d", i);
            c++;
        }
    }
   printf("\n");
}
 

Offline Quantum

  • Junior
  • **
  • Mesaje postate: 164
  • Popularitate: +6/-3
Răspuns: probleme in C
« Răspuns #3 : Martie 01, 2012, 01:07:29 a.m. »
Ai nevoie de un contor care sa incrementeze pana la 10 doar cand ai un numar printat. Astfel am inlocuit blocul tau "for" cu un "do-while"
#include<stdio.h>

int main()
{
   int c, m, n, p, s, i, A;
   printf("\n Dati n = ");
   scanf("%d", &n);
   printf("\n Dati m = ");
   scanf("%d", &m);
   printf("\n");
   c=0;
 
   i=1;
   do
   {
        p=i; s=0;
        while(p)
        {
           A=p%10;    
           s+=A;       // calculez suma digitilor
           p/=10;
        }
        if(s<=m)
        {
            printf(" %d", i);
            c++;
        }
 
        i++;    
    } while (c<10);

   printf("\n");
}
« Ultima Modificare: Martie 01, 2012, 03:15:21 a.m. de Quantum »