Program w C++

Odpowiedz Nowy wątek
2015-01-21 21:43
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 :)

Pozostało 580 znaków

2015-01-21 21:46
0

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

Pozostało 580 znaków

2015-01-21 21:51
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;}
edytowany 2x, ostatnio: Kenger, 2015-01-22 00:22

Pozostało 580 znaków

2015-01-21 21:54
0

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-21 22:28
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, pozatym, masz tablice floatów, a funkcja przyjmuje floata.

edytowany 1x, ostatnio: _borisov8, 2015-01-21 22:33

Pozostało 580 znaków

2015-01-21 22:38
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. ;)

edytowany 2x, ostatnio: Kenger, 2015-01-21 22:39

Pozostało 580 znaków

2015-01-21 22:44
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 ?

edytowany 2x, ostatnio: _borisov8, 2015-01-21 22:50

Pozostało 580 znaków

2015-01-21 23:03
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ć.

Pozostało 580 znaków

2015-01-21 23:29
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.

edytowany 2x, ostatnio: _borisov8, 2015-01-21 23:30

Pozostało 580 znaków

2015-01-21 23:59
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]<<" ";
edytowany 1x, ostatnio: Kenger, 2015-01-22 00:00
Tak jak Ci pokazałem wyżej, to co wstawiłem to nie funkcja a petla w mainie. Jedyne co musisz zrobić to napisać funkcje która zwraca zero lub jeden w zależności czy liczba jest pierwsza, a następnie wstawić ją do ifa, nie musisz przekazywać całej tablicy bo po co? - _borisov8 2015-01-22 00:03

Pozostało 580 znaków

2015-01-22 00:25
0
void pierwsza(UINT liczba) {
   if( liczba_jest_pierwsza( liczba ) ) return true;

   return false;
}

wywołuje się tak:

bool wynik = pierwsza( liczba_do_testu );

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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