Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

Buna!
Din programul asta:

#include
#define INF 2147000000
using namespace std;
int w[10],n,x,i,j,cif,p,minn=INF;
bool ok;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
while(x)
{
cif=x%10;
x=x/10;
w[cif]=w[cif]+1;
}
}
do
{
ok=true;
minn=INF;
for(i=0;i<=9;i++)
if((w[i] w[p]=INF;
if(!ok) cout<

} while(!ok);

return 0;
}


imi poate explica cineva ce face :

do
{
ok=true;
minn=INF;
for(i=0;i<=9;i++)
if((w[i] w[p]=INF;
if(!ok) cout<

} while(!ok);

Multumesc!


sikesjack1: am inteles
sikesjack1: la bucata asta de cod ma refeream:
sikesjack1: do
{
ok=true;
minn=INF;
for (i=1; i<=9;i++)
if ((vf[i] vf[p]=INF;
if (!ok)
cout < }while (!ok);
sikesjack1: pfff si aici apare asa, firar sa fiee
sikesjack1: do
{
ok=true;
minn=INF;
for (i=1; i<=9;i++)
if ((vf[i] vf[p]=INF;
if (!ok)
cout < }while (!ok);
sikesjack1: do
{
ok=true;
minn=INF;
for (i=1; i<=9;i++)
if ((vf[i] vf[p]=INF;
if (!ok)
cout << p <<" ";
}while (!ok);
sikesjack1: haleluia :)) bucata asta de cod nu o inteleg
boiustef: redactează if-ul... ceva nu e bine acolo..
ţi-am spus despre pastebin.com, să aduci link de acolo... nu ai încercat nicicând?
sikesjack1: Acuma l-am facut asa, aici este link-ul: https://pastebin.com/XCZ30tsc
sikesjack1: Multumesc!

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

Cred codul a fost planificat să afişeze cifrele aparente în cele n numere introduse, în ordinea crescătoare a apariţiei lor, adică mai întâi pe cele cu frecvenţă mai mică. Sunt câteva observaţii. constanta INF a fost definită prea mare şi intră în conflict cu datele de tip int. Nu înţeleg de ce a fost luat

for (i=1; i<=cif; i++), de ce până la cif? cred din greşeală, şi de ce i de la 1 şi nu de la 0? Poate numerele introduse nu au cifre nule?

Acelaşi lucru şi aici

for (i=1; i<=9;i++)

       if ((vf[i]<minn)&&(vf[i]))minn=vf[i], p=i, ok=false;

i nu e de la 0. Eu am redactat puţin codul...

Dacă codul acesta are enunţ, era bine să-l scrii...

Explicație:

#include <iostream>

#define INF 2470000

using namespace std;

 int n,i,x,cif,vf[10],minn=INF,p;

int main()

{

   bool ok;

   cin >>n;

   for (i=1; i<=n;i++)

   {

       cin >>x;

       while (x)

       {

           cif =x%10;

           x /=10;

           vf[cif] +=1;

        }

   }

   for (i=0; i<=9; i++)

       cout <<vf[i]<<" ";

   cout << "\n";

   do

   {

       ok=true;

       minn=INF;

   for (i=0; i<=9;i++)

       if ((vf[i]<minn)&&(vf[i]))minn=vf[i], p=i, ok=false;

   vf[p]=INF;

   if (!ok)

       cout <<  p <<"  ";

   }while (!ok);

   return 0;

}


boiustef: if ((vf[i] < minn)&&(vf[i]))
acest if verifică dacă frecvenţa cifrei este mai mică decât minn şi frecvenţa cifrei nu e 0, atunci la acea frecvenţă se pune acea valoare INF şi se memoriţează în p acea cifră cu frecvenţă minimă şi la a doua verificare evident acea cifră nu se va cerceta că frecvenţa deacum nu e minimă. Astfel vor fi înlocuite toate frecvenţele prin INF. Când nu vom mai avea ce înlocui, se va ieşi din ciclul do ... while
sikesjack1: Am inteles, multumesc pentru explicatie, este foarte buna!
Alte întrebări interesante