[C++] Co robi ten program?

BArtek123123123
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 9 lut 2016, o 09:11
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C++] Co robi ten program?

Post autor: BArtek123123123 »

Jak ktoś mi powie na czym polega ten program będę wdzięczny

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main(int argc, char *argv[])
{
  
int tab[100];
  
for(int i=1;i<=100;i++) tab[i]=i;
//for(int i=1;i<=100;i++) cout<<tab[i]<<" ";
  
int k=2;
double pi=2;
int i;
  
while(k<100)
 {
  
  for(pi=2;pi<10;pi++)
  {
    for(i=0;i<=100;i++) 
    {
      if((tab[i]==pow(k,pi))&&(tab[i]!=0)) 
       {
        tab[i]=0;
        cout<<"*";
       }
     }
 
    k=0;
    for(int y=0;y<=100;y++)
     {
      if(tab[y]!=0)
       {
        k=tab[y];
        y=100;
       }
      }
   }
  cout<<endl<<endl<<endl;
  for(int i=1;i<=100;i++) cout<<tab[i]<<" ";
  cout<<endl; 
 }
  
system("PAUSE");
return EXIT_SUCCESS;
}
Ostatnio zmieniony 9 lut 2016, o 12:33 przez Kacperdev, łącznie zmieniany 2 razy.
Powód: [code]
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[C++] Co robi ten program?

Post autor: jarzabek89 »

Nie robi nic sensownego, ponieważ jest błędny, mimo to że się kompiluje.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

Co robi ten program?

Post autor: SlotaWoj »

Najpierw wypełnia tablicę tab (począwszy od tab[1]) kolejnymi (od 1) liczbami całkowitymi.
Uwaga: Na skutek konstrukcji pętli for niezgodnej z definicją tablicy tab[0] nie jest wypełniane, a „element tablicy” następny za końcowym jest nadpisywany wartością 100.
Następnie pierwszy (niezerowy) element tablicy tab równy (k=2)^2=4 jest zerowany, a do pliku wyjściowego jest wyprowadzany znak *.
Jest wykonywane podstawienie: k=0.
Pod k jest podstawiana wartość pierwszego niezerowego elementu tablicy tab, czyli niezdefiniowana (zazwyczaj) wartość z tab[0].
Dalszy przebieg programu zależy o wartości tab[0]. Najczęściej nic się z tablicą tab nie dzieje, ale są możliwe też inne przypadki, np. uzyskałem przebieg gdzie wszystkie elementy tablicy będące kolejnymi potęgami dwójki były zerowane.
Na zakończenie tablica tab (począwszy od tab[1]) i „element tablicy” następny za końcowym jest wyprowadzana do pliku wyjściowego i tak „w kółko”.

Odpowiedź na postawione pytanie jest następująca:
  • Program ilustruje brak kompetencji autora.
BArtek123123123
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 9 lut 2016, o 09:11
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C++] Co robi ten program?

Post autor: BArtek123123123 »

Właśnie, bo dostałem zadanie od wykładowcy aby rozwikłać do czego służy ten program, został mi wysłany a ja w całości go tutaj skopiowałem. Nadal nie wiem co odpowiedzieć na pytanie ,,do czego służy" poza tm błędem i faktem, że wyświetla liczby od 1,2,3,0,5,6,7...100
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[C++] Co robi ten program?

Post autor: jarzabek89 »

Program ten wychodzi poza tablicę, używa niezadeklarowanej zmiennej. Napisany tragicznie. Jedyne do czego służy, to służy jako przykład "jak nie pisać programów".
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C++] Co robi ten program?

Post autor: SlotaWoj »

Można przypuszczać, że program ma w tablicy 100-elementowej wypełnionej kolejnymi liczbami naturalnymi zerować te elementy, które są potęgami o podstawach i wykładnikach będących liczbami naturalnymi większymi od 1, tzn. \(\displaystyle{ 2^2; 2^3; 2^4; 2^5; 2^6; 3^2; 3^3; 3^4; 5^2; 6^2; 7^2\mbox{ i } 10^2}\). Na ww. liście nie ma \(\displaystyle{ 4^2=2^4; 4^3=2^6; 8^2=2^6\mbox{ i }9^2=3^4}\).

Gdy tablica tab była wczytywana z pliku, to można by przypuszczać, cel programu jest nieco inny, ale również polegający zerowaniu tych elementów tablicy, które są pewnymi potęgami o kolejnych wykładnikach naturalnych większych o 1.

Program jest ewidentnie błędny i rozpoznanie celu, któremu ma służyć, jest utrudnione.
liu
Użytkownik
Użytkownik
Posty: 1330
Rejestracja: 10 paź 2004, o 13:30
Płeć: Mężczyzna
Lokalizacja: Suchedniów
Pomógł: 104 razy

[C++] Co robi ten program?

Post autor: liu »

jarzabek89 pisze:Program ten wychodzi poza tablicę, używa niezadeklarowanej zmiennej. Napisany tragicznie. Jedyne do czego służy, to służy jako przykład "jak nie pisać programów".
To jest ćwiczenie, które ułatwia zrozumienie trudu pracy prowadzącego laboratoria/projekty, który musi rozwikływać takie kody źródłowe codziennie:)
ODPOWIEDZ