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

Se da un fisier text, care contine mai multe linii. Pe fiecare linie sunt numere de la 0 la 255.In C++;




Cerinte:


a.Fa o functie care sa returneze un array. Array-ul va fi format din numerele de pe pozitia centrala de pe fiecare linie;

b.Fa o functie care returneaza un array cu numerele prime, din array-ul descoperit la punctul ;

c.Fa o functie care transforma numerele prime descoperite la punctul in caractere ascii si returneaza un sir de caractere (cuvant) format din ele

Răspunsuri la întrebare

Răspuns de mariasm
1

Răspuns:

#include <iostream>

#include <math.h>

#include <fstream>

#include <string.h>

using namespace std;

int nrprime, nrcentru,a[10][10]={0};

char *transformare(int *p,int n)

{

   char v[10],*p2;

   for(unsigned int i=0; i<n; i++)

       {v[i]= *p;

       p++;

       }

   p2=v;

   return p2;

}

int *centru (int i)   //functia care returneaza arrayul format din numerele de //pe pozitiile centrale ale liniilor citite

{

   int  v[10]={0},x,p=-1, *p2;

   for (unsigned int k=0; k<i; k++)

   {

       if (a[k][0]%2==1)      //daca pe o linie este un numar impar de numere //inseamna ca pe pozitia centrala se gaseste un singur numar

           {

           x=a[k][0]/2+1;

           v[++p]=a[k][x];

           } else              //altfel sunt 2 numere

       {

           v[p]=a[k][a[k][0]/2];

           v[p+1]=a[k][a[k][0]/2+1];

           p+=2;

       }

       nrcentru=p;

       p2=v;

   }

   return p2;

}

int * prime (int*p,int n)     //verifica daca numarul este prim

{

   int prim[10],j=-1,*p2;

   bool ok;

   for (int i=0; i<n; i++)

   {

   ok=1;

   unsigned int k=2;

   if ((*(p+i))%k==0)

       ok=0;

   k=3;

   while (k<=sqrt(*(p+i))&&ok)

       {

           if (*(p+i)%k==0)

           {

               ok=0; break;

           }

       k+=2;

       }

   if (ok)

       prim[++j]=*(p+i);

   }

   nrprime=j;

   p2=prim;

   return p2;

}

int main()

{

   int *p;

   char *p2;

   unsigned int i=0,j=1;

   char c;

   ifstream f("fisier.in");

   while (!f.eof())     //cat timp mai poti citi din fisier

   {

       f.get(c);       //citesti caracter cu caracter

       if (isdigit(c))    //daca e cifra

           a[i][j]=a[i][j]*10+c-'0'; else

       if (c==' ')      //daca e spatiu treci la urmatorul numar

           j++; else

       if (c=='\n')

       {

           a[i][0]=j;       //pe prima pozitie de pe fiecare linie retinem cate //numere se gasesc pe acea linie

           ++i; j=1;

       }

   }

   p=centru(i-1);

   p=prime (p,nrcentru+1);

   p2=transformare(p,nrprime+1);

   {

       for (unsigned int i=0; i<nrprime+1; i++)

           {

               cout<<*p2;

               p2++;

           }

   }

   return 0;

}

Explicație:


Gabriel1813: #include
#include
#include
#include
using namespace std;
int nrprime,nrcentru,a[10][10]={0};
char *transformare(int*p,int n)
{
char v[10],*p2;
for(unsigned int i=0;i {
v[i]=*p;
p++;
}
p2=v;
return p2;
}
int *centru(int i)
{
int v[10]={0},x,p=-1,*p2;
for(unsigned int k=0;k {
if(a[k][0]%2==1)
{
x=a[k][0]/2+1;
v[++p]=a[k][x];
}
else
{
v[p]=a[k][a[k][0]/2];
v[p+1]=a[k][a[k][0]/2+1];
p=p+2;
}
nrcentru=p;
p2=v;
}
return p2;
}
Gabriel1813: int *prime(int *p,int n)
{
int prim[10],j=-1,*p2;
bool ok;
for(int i=0;i {
ok=1;
unsigned int k=2;
if((*(p+i))%k==0)
ok=0;
k=3;
while(k<=sqrt(*(p+i))&&ok)
{
if(*(p+i)%k==0)
{
ok=0;
break;
}
k=k+2;
}
if(ok)
prim[++j]=*(p+i);
}
nrprime=j;
p2=prim;
return p2;
}
Gabriel1813: int main()
{
int *p;
char *p2;
unsigned int i=0,j=1;
char c;
ifstream f("test.in");
while(!f.eof())
{
f.get(c);
if(isdigit(c))
a[i][j]==a[i][j]*10+c-'0';
else
if(c==' ')
j++;
else
if(c=='\n')
{
a[i][0]=j;
++i;
j=1;
}
}
p=centru(i-1);
p=prime(p,centru+1);
p2=transformare(p,nrprime+1);
{for(unsigned int i=0;i {
cout<<*p2;
p2++;
}
}
return 0;
}
Gabriel1813: l-am luat exact copy-paste din code Blocks
Gabriel1813: am pus codul si in Dev C++ si intampin aceeasi problema,ce pot face?
mariasm: ma uit acum sa vad care e problema
mariasm: nu inteleg cum poate merge la mine si la tine nu
Gabriel1813: ok,daca gasiti o alta solutie sau observati ceva,va rog sa atasati aici.Multumesc pentru tot suportul!
Gabriel1813: "char *transformare(int *p,int n)" acest tip se numeste pointer la functie ?
mariasm: e o functie care primeste ca argument un pointer si returneaza tot un pointer
Alte întrebări interesante