Program w C++

0

Witam bardzo serdecznie wszystkich programistów. To moje początki z językiem C++ i mam do napisania program:

  • przygotować plik dane.txt z liczbami całkowitymi o liczebności n>10
  • wczytać dane do tablicy dwuwymiarowej tab1
  • za pomocą funkcji typu void (void zastąp) zastąpić zerami w tablicy te liczby które nie są liczbami pierwszymi
  • zapisać w pliku wynik.txt tablice
  • utworzyć tablice dynamiczną tab2 powstałą z 2^n gdzie n jest liczbą w pierwszej tablicy
  • posortować obie tablice za pomocą funkcji void sortuj
  • do wyświetlania tablic funkcja void wyswietltab

Pomoże ktoś? Będę bardzo wdzięczny :)

0

Z czym dokładnie problem?
Jak oczekujesz gotowca to zły dział wybrałeś :P

0

Mam problem z funkcjami, nie wiem jak je stosować, a dokładniej chodzi o void zastap. :)
Poniżej kod:

 
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

void zastap(int n, int *tab);
void wyswietltab(int n, int *tab);
int main() 
{
float tab1[15], tab2;
int n;

ifstream plik;
plik.open( "liczby.txt" );

{
	for (int i=0; i<15; i++)
	plik >> tab1[i];
}
	for(int i = 0; i < 15; ++i) 
	cout<<tab1[i]<<" ";

system("PAUSE");
return EXIT_SUCCESS;
}
void zastap(int n, int* tab){
	for (int i=0; i<n; i++){
		if (i%2 == 0)
		cout<<tab[i];
		else cout<<"0";
	}
	
}
void wyswietltab(int n, int *tab){
for (int i=0; i<n; i++)
cout<<tab[i]<<" ";
cout<<endl;}
0

No i pokaż jak próbowałeś to napisać.

0

Po primo.
Klasa ifstream służy do czytania z pliku.
Użyj fstream.
Po drugie primo.
Jeśli funkcja zastąp ma wykonywać test pierwszości, to robi to absolutnie źle.
nie piszesz w niej do pliku, ale na standarowe wyjście, nie musisz szukać od ( 0 do n ) wystarcz od 2 do sqrt(liczba) * 2, poza tym, masz tablice floatów, a funkcja przyjmuje floata.

0

"Jeśli funkcja zastąp ma wykonywać test pierwszości, to robi to absolutnie źle.
nie piszesz w niej do pliku, ale na standarowe wyjście, nie musisz szukać od ( 0 do n ) wystarcz od 2 do sqrt(liczba) * 2"

Mógłbyś troche jaśniej? To moje początki i nie za bardzo wiem o co chodzi. ;)

0

Chcesz zmienić plik, ale obiekt który (jest tym plikiem tak jakby) czyli w Twoim przypadku zmienna plik, jest niezdolna do modyfikacji pliku.
Ty wysyłasz dane na standardowe wyjście, czyli po prostu na ekran konsoli.
Jak chcesz pisac do pliku to

#include <fstream> // Ta klasa może modyfikować plik
int main()
{
fstream plik("plik.txt", std::fstream::in | std::fstream::out) // Drugim argumentem są flagi bitowe, nie są konieczne, ale warto wiedzieć :)
plik << "jakieś_coś";// Piszesz do pliku
plik.close();
}

Co do tego że wystarczy szukać do sqrt(liczba) * 2, to kwestia wydajności, po co wykonywać operacje 500 razy, skoro można 44 ?

0

Tyle że mi chodzi o wczytanie z gotowego pliku txt. liczb do tablicy a nastepnie sprawdzenie czy ta tablica posiada liczby które nie są pierwsze, a te z kolei wyzerować.

0

Ah, przepraszam, niedoczytałem.
W takim razie

for(int i = 0; i < 15; ++i)
{
  if(tab1[i] == TU_TWOJA_FUNKCJA_KTÓRA_SPRAWDZA_PIERWSZOSĆ())
	tab[i] = 0;
  cout<<tab1[i]<<" ";
}

I będzie gucio, ale od razu Ci mówie, że nie sprawdzasz pierwszości, tylko czy dzieli sie bez reszty przez 2.

0

Coś takiego? Teraz pytanie, jak wywołać tą funkcję w programie?

 
void zastap(int n, int *tab){

	for (int i=0; i<15; i++){
	if(tab1[i] == i%2 == 0)
        tab[i] = 0;
  	cout<<tab1[i]<<" ";
0
void pierwsza(UINT liczba) {
   if( liczba_jest_pierwsza( liczba ) ) return true;

   return false;
}

wywołuje się tak:

bool wynik = pierwsza( liczba_do_testu );
0

"wpisanie" funkcji, jest równoznaczne z jej wywołaniem.
Jeśli musisz to zrobić w tej funkcji, przekaż wskaźnik po prostu.

0

I własnie w tym rzecz, że nie mam kompletnie pojęcia jak tą funkcję wywołać za pomocą wskaznika. W jaki sposób to zrobić?

1

W sumie, co mi tam.
Mniej wiecej jasne?
btw. nie wywołujesz funkcji za pomocą wskaźnika, bo wskaźniki na funkcje to zupełnie inna bajka.
tylko przekazujesz wskaźnik poprzez argument.

 
bool isPrime(int Liczba)
{
        int GranicaWyznaczalnosci = sqrt(Liczba) * 2;
        if(Liczba == 1) return 0;                                
        if(Liczba == 2) return 1;
        for(int i=2;i<GranicaWyznaczalnosci;++i)
        {
                if(Liczba % i == 0) return 0;                   //Jesli zlozona;
        }
        return 1;                                               // Jesli pierwsza
}
void zamien(int liczba,int wielkosc_tablicy,int *tab)
{
	for(int i=0;i<wielkosc_tablicy;++i)
		if(isPrime(tab[i]) == false)							// Jesli nie jest pierwsza
			tab[i] = 0;											// przypisz zero
}
0

Teraz troche jaśniej. Mój program wygląda tak, ale tym razem wywala mi błędy.

 
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;


void zamien(int liczba,int wielkosc_tablicy,int *tab);
int main() 
{
int tab1[15]


fstream plik;
plik.open( "liczby.txt" );

{
	for (int i=0; i<15; i++)
	plik >> tab1[i];
}

	bool isPrime(int Liczba);

        int GranicaWyznaczalnosci = sqrt(Liczba) * 2;
        if(Liczba == 1) return 0;                                
        if(Liczba == 2) return 1;
        for(int i=2;i<GranicaWyznaczalnosci;++i)
        {
                if(Liczba % i == 0) return 0;                   //Jesli zlozona;
        }
        return 1;
	
}
	void zamien(int liczba,int wielkosc_tablicy,int *tab)
{
    for(int i=0;i<wielkosc_tablicy;++i)
        if(isPrime(tab[i]) == false)                            // Jesli nie jest pierwsza
            tab[i] = 0;                                            // przypisz zero
}
1

Eh.
Edytowałem ten twój kod tak na szybko, nie gwarantuje że jest 100% ok, jestem mocno śpiący.
I serio proponuje Ci abyś od nowa kurs jakiś zaczął czytać, w funkcji main nie deklarujemy innych funkji

 
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cmath>
using namespace std;
bool isPrime(int Liczba)
{
        int GranicaWyznaczalnosci = sqrt(Liczba) * 2;
        if(Liczba == 1) return 0;                                
        if(Liczba == 2) return 1;
        for(int i=2;i<GranicaWyznaczalnosci;++i)
        {
                if(Liczba % i == 0) return 0;                   //Jesli zlozona;
        }
        return 1;
}
void zamien(int wielkosc_tablicy,int *tab)
{
    for(int i=0;i<wielkosc_tablicy;++i)
        if(isPrime(tab[i]) == false)                            // Jesli nie jest pierwsza
            tab[i] = 0;                                            // przypisz zero
}
void wypisz(int wielkosc,int *tab)
{
	for(int i=0;i<wielkosc;++i)
		cout << tab[i] << ',';
}
int main() 
{
int tab1[15];
fstream plik;
plik.open( "liczby.txt" );
    for (int i=0; i<15; i++)
    {
		plik >> tab1[i];
	}
	zamien(15,tab1);
	wypisz(15,tab1);
}
0

Działa. Muszę przyswoić to jeszcze. Dzięki wielkie za pomoc i dobranoc. ;)

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