Ştiri:

Vă rugăm să citiţi Regulamentul de utilizare a forumului Scientia în secţiunea intitulată "Regulamentul de utilizare a forumului. CITEŞTE-L!".

Main Menu

probleme in C

Creat de automat, Februarie 29, 2012, 09:14:18 PM

« precedentul - următorul »

0 Membri şi 1 Vizitator vizualizează acest subiect.

automat

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;
}

tavy

#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

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");
}

Quantum

#3
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");
}