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

Care este greșeala făcută? Nu îmi afișează ceea ce trebuie
#include <cstdio>
int main ()
{
int n, v[1000], i, d, nd, r, uc, e, p;
FILE *f;
//citire vector din fisier
f= fopen("operatii_numere.in", "r");
fscanf(f, "%i", &n);
for(i=0; i<n; i++)
{
fscanf(f, "%i", &v[i]);
}
fclose(f);

//afisare vector pe ecran
printf("vectorul are %i elemente: \n", n);
for(i=0; i<n; i++)
{
printf(" %i", v[i]);
}
printf("\n");

//numere prime, numere neprime
for(i=0; i<n; i++)
{
for(d=1; d<=n; d= d+1)
{
r=0;
if(v[i]%d==0)
{
printf("%c", d);
nd= nd+1;
}
printf("%i are %i divizori\n", v[i], nd);
if(nd==2)
{
printf("%i este prim\n", v[i]);
uc= v[i]%10;
r= r*10+uc;
printf("rasturnatul numarului %i este %i", v[i], r);
}
else
{
printf("%i nu este prim\n", v[i]);
p = 2;
while (p * p <= v[i])
{
e = 0;
while (v[i] % p == 0)
{
v[i] = v[i] / p;
++e;
}
if (e > 0)
{
printf("%i la puterea %i\n", p, e);
}
++p;
}
if (v[i] > 1)
{
printf("%i la puterea 1\n", v[i]);
}
}
}
}
return 0;
}​


lucaciucandrei: ce trebuie sa faca mai exact programul tau? sau ce vrei tu sa faca?
marymaria2005666: Să se afișeze elementele din vector citite din fișier, pentru fiecare element să se calculeze numărul de divizori și dacă este număr prim sau neprim. pentru numere prime să se afișeze răsturnatul, iar pentru cele neprime descompunerea în factori primi
marymaria2005666: Nu am învățat încă la școală și programele le fac in c++
lucaciucandrei: ok

Răspunsuri la întrebare

Răspuns de lucaciucandrei
2

tu ai foarte multe greseli in programul tau (verificarea de primalitate, algoritmul de rasturnare) etc. asa ca ti-am refacut programul complet

te sfatuiesc  pe viitor sa iti structurezi programul in mici functii, sa-ti imparti efortul, astfel incat sa poti intelegi mai usor ce faci

#include<iostream>

#include<fstream>

using namespace std;

ifstream f("operatii_numere.in");

int v[10001], n;

int prim(int x) {

   if (x <= 1)

       return 0;

   for (int d = 2; d <= x / 2; d++)

       if (x % d == 0)

           return 0;

   return 1;

}

int invers(int x) {

   int rev = 0;

   while (x != 0) {

       rev = rev * 10 + x % 10;

       x /= 10;

   }

   return rev;

}

void dpfp(int x) {

   int d = 2, p;

   while (x > 1) {

       p = 0;

       while (x % d == 0) {

           x /= d;

           p++;

       }

       if (p != 0)

           cout << d << " la puterea " << p << endl;

       d++;

   }

}

int main() {

   f >> n;

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

       f >> v[i];

       if (prim(v[i]) == 1 || v[i] == 1)

           cout << invers(v[i]) << endl;

       else {

           cout << endl << "numarul nu e prim, deci se va descompune in urmatorul produs:" << endl;

           dpfp(v[i]);

           cout << endl;

       }

   }

   f.close();

   return 0;

}


marymaria2005666: mulțumesc mult pentru ajutor! sper că voi reuși să îl schimb eu în cstdio!
marymaria2005666: Încă nu am învățat subprogramele la școală, de aceea programul meu nu a fost structurat astfel
lucaciucandrei: am inteles, nu am stiut asta, scuze
lucaciucandrei: eu sper sa intelegi in ansamblu ce am facut
marymaria2005666: Voi înțelege citind cu mare atenție! Mulțumesc mult
lucaciucandrei: cu drag!
Alte întrebări interesante