Jump to content
Iulian Catalin Radu

Problema Cu Instructiunea For

Recommended Posts

Salut, am o problema pe cat e de banala pe atat de stresanta, de aceea nu pot pot trece peste ea si daca sunteti amabili sa imi sugerati unde este greseala in acest cod pentru ca nu imi afiseaza "nimic" la infinit. Programul ruleaza binem daca citesc un nr de la tastatura si aplic un if (n=>100 && n<=999). Va multumesc.

 

/*27. Sa se genereze toate numerele naturale de 3 cifre 
pentru care cifra sutelor este egala cu suma cifrelor zecilor si unitatilor.
*/
#include<stdio.h>
#include<conio.h>
 
 
int main ()
    {            
         int n,a,b,c,S=0,p=1,ni;
         
      
         
         
         for(n=400;n<500;n++)
         {
                    ni=n;
                 
                  
                    a=n/100;
                    n=n%100;
                    b=n/10;
                    c=n%10;
                    
                    S=b+c;
                    
                     if(a==S)
                        printf("Nr. care indeplineste conditia=%dn",ni);
                     else
                       printf("nimic");
                    
         }
                    
         getch();
         }

Share this post


Link to post
Share on other sites

Ruleaza la infinit pentru ca tu tot timpul faci:

  n=n%100;

adica imparti la 100. Cum vrei sa ajunga n la 500, daca tu tottimpul ii adaugi 1, si apoi il imparti la 100? :)) Banui ca vroiai ni = ni % 100 (desii vad ca ulterior nu mai folosesti valoare aia).

 

Oricum uitanduma in mare, eu nu iti inteleg logica. Desii chestia din 'for' parca parca suna ok (ignorand faza nu 'n' si 'ni'  care cauzeaza bucla infinita si faptul ca b nu lai generat ok (trebuia b= (n/10) %10 pentru ca b/10 iti va da primele 2 cifre din numar, iar tu o vrei doar pe cea dea 2a ), de ce ai un for de la 400 la 500? Macar de ar fi de la 0 la 1000 (sa treaca prin toate numerele de 3 cifre, considerand ca primele cifre pot fi 0... sau macar de la 100 la 1000 in caz contrar).

 

Totusi eu as face altfel.. As construi numarul final, pornind de la egalitatea data.. (adica considerand A pentru sute, B pentru zeci si C pentru unitati, as face 2 foruri care sa creeze toate combinatiile posibile de B si C, leas aduna, si daca suma lor (adica A) e mai mica decat 10, numarul este A*100 + B*10 + C. Totusi, si varianta aleasa de tine ar fi buna, daca ai face schimbarile mentionate mai sus)


love is a verb
Love is a doing word

Share this post


Link to post
Share on other sites

Am gandit in felul urmator in interiorul for-ului:

I   -i-am dat lui ni valoarea lui n pentru a putea efectua operatii cu n. (dar am uitat sa i-o dau la loc in ultima linie din "for" adica n=ni, ca sa poata creste ).

II   -am incercat sa obtin cifra sutelor ca fiind catul impartirii lui n la 100.

III  -b este cifra zecilor de la restul impasrtii de mai intainte

IV -c este chiar restul impartirii la 10 a restului de la pasul (II)

 

Am sa fac imediat modificari pe codul asta, apoi am sa incerc si varianta ta :D.

 

Multumesc pentru reply :D

Share this post


Link to post
Share on other sites
int main ()
    {            
         int n,a,b,c,S=0,p=1,ni;
         
      
         
         
         for(n=100;n<=999;n++)
         
         {
                    ni=n;
                    a=n/100;
                    n=n%100;
                    b=n/10;
                    c=n%10;
                    
                    S=b+c;
                    
                     if(a==S)
                        printf("Nr. care indeplineste conditia=%dn",ni);
                    
                    n=ni;
                    
         }
                    
         getch();
         }
 
Acum face ce trebuie. Merci inca o data :D

Mai am o intrebare totusi :D, am vazut ca unii utilizatori au copiat codul din CodeBlocks sau DevC++ si formatul aici aparea exact ca in programele respective. Ce trebuie sa dau ca sa imi apara si mie la fel, pentru eu dau pur si simplu CTRL+V si atat.

Multumesc :)

Share this post


Link to post
Share on other sites

cateva ponturi:

Nu ai pus return 0; la sfarsit..functia e de tip int, deci tre sa returneze ceva.

 

De ce faci ni=n, lucrezi cu n, si faci n=ni? De ce nu faci ni=n, si lucrezi cu ni mai tarziu?


love is a verb
Love is a doing word

Share this post


Link to post
Share on other sites

Ai dreptate trebuia sa lucrez cu ni mai departe, cumva m-am scarpinat cu mana la urechea opusa si dupa cap ( intelegi imaginea :D ).

Iar faza cu return 0 nu stiu la ce imi foloseste practic, atat timp cat pot sa vizualizez rezultatul si executa operatiile corect.

Cu alte cuvinte ce se intampla daca nu pun return 0 si daca pun return 0...ma intereseaza daca se intampla ceva la nivel de registrii sau ceva de genul asta :D.

 

Multumesc de ponturi, am sa tin seama :D

Share this post


Link to post
Share on other sites

in mod normal, programul tau nu va fi singur, ci va lucra cu mai multe programe. Deci, in loc sa il pornesti tu cu mana ta, probabil va fi lansat in executie de alt program (iti dai seama ca un program modern, chiar si unul simplu e destul de complicat, si e alcatuit din mai multe programe mai mici care lucreaza impreuna). 

In momentul in care un program (A) lanseaza in executie alt program(B), acesta(A) ar vrea sa stie daca programul fiu (B) sa terminat cu succes (adica totul a fost bine) sau daca a aparut o eroare. Acest lucru se realizeaza prin valoarea returnata de program. 

Desi poti returna orice valoare(si nu e necesar sa returnezi o valoare, dupa cum ai observat si tu), sa obisnuit ca un program sa returneze 0 daca sa terminat cu succes, iar in caz contrar va returna o alta valoare, care va simboliza ce eroare a aparut (de ex, daca ai o eroare la citire returnezi o valoare, daca ai eroare la scriere returnezi alta valoare, si asa mai departe).


love is a verb
Love is a doing word

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...