Wczytywanie liczb z pliku, wybieranie liczb pierwszych i zapis do drugiego pliku

0

witam.
celem zadania jest stworzyć funkcje która wybiera z pliku liczby pierwsze i wpisuje je do drugiego pliku.
jakies wskazówki?

kod:

#include <stdio.h>
#include <math.h>
#include<stdlib.h>

int Pierwsze(int n){
    int i;
   if(n<2)
      return 0;
  for(i=2;i*i<=n;i++)
      if(n%i==0)
        return 0;
    return n;
}


int main()
{
    int n,nRozmiar;
	double x;
	FILE* plik;

	double* tab;
	tab=(double*)malloc(nRozmiar*sizeof(double));

	plik=fopen("Dane.txt", "r");
	if (plik == NULL) {
		printf("Nie mozna otworzyc pliku.\n");
		return 1;
	}
	for (n = 0; n <nRozmiar ; n++) {
		fscanf(plik, "%lf", &x);
		tab[n] = x;
		nRozmiar++;
	}
	fclose(plik);

	for (n = 0; n < nRozmiar; n++)
		printf("[%d]=%lf\n", n, tab[n]);


	return 0;
}
0

Fajny cel zadania, gdzie problem?

0

Problem w tym ze nie wiem jak określić. Do jakiego momentu na ma sie wykonywać pętla poniewaz tablica jest zaalokowana dynamicznie. Nie wiem też czy dobrze zaimplementowane jest czytanie z pliku liczb. (sa one pisane jedna pod drugą w pliku).

0

na początek to metoda do liczb pierwszych jest źle zaimplementowana.

int Pierwsze(int n){
	int i;
	if(n < 2)
		return 0;
	for(i = 2; i * i <= n; i++)
		if(n % I == 0)
			return 0;
	return n;
}

co to ma finalnie zwracać?

0

Miało zwracać liczbe pierwsza ale teraz to juz nie wiem..

0
int Pierwsze(double* tab[],int num){
    int i;
   if(tab[i]<2)
      return 0;
  for(i=2;i*i<=n;i++)
      if(tab[i]%i==0)
        return 0;
    return n;
}

a może tak

no i oczywiscie return nie n tylko ta liczbe

0

Jak chcesz sprawdzić czy zadana liczba jest pierwsza, a potem zwrócić tę liczbę, jeżeli jest pierwsza i 0, jeżeli liczbą pierwszą nie jest, to raczej coś takiego:

int Pierwsza(int n) {
	int ile = 0;
	for (int i = 1; i <= n; ++i) {
		if ((n % i) == 0)
			ile++;
	}
	return ile == 2 ? n : 0;
}
tab=(double*)malloc(nRozmiar*sizeof(double));

Po co dynamiczna alokacja? nRozmiaru nie pobierasz nigdzie, jak chcesz, żeby rozmiar był ustalany w czasie wykonywania programu, to należałoby najpierw pobrać nRozmiar przy pomocy scanfa.

for (n = 0; n <nRozmiar ; n++) {
    fscanf(plik, "%lf", &x);
    tab[n] = x;
    nRozmiar++;
}

inkrementujesz nRozmiar w jakim celu? taka pętla będzie się wykonywać bez przerwy[o ile oczywiście nRozmiar będzie miał jakąś wartość].

0

Tablica nie jest Ci w ogóle potrzebna.

int main( void )
{
  FILE* input = fopen( "input.txt", "r" );
  FILE* outout = fopen( "output.txt", "w" );
  int number;
  while( fscanf( input, "%i", &number ) ) 
  {
    if ( IsPrime( number ) ) {
      fprintf( output, "%i\n", number );
    }
  }
  fclose( input );
  fclose( output );
  return 0;
}
0

tyle, że w treści zadania zaznaczone jest, żeby użyć tablicy.

0

Super, n postów, a nie mamy treści zadania, można prosić?:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1