[C++] Suma liczb pierwszych pod główną przekątną.

0

Moi drodzy mam problem potrzebuje szybko poprawionego programu z C++ na zaliczenie poprawki. [!!!] [!!!]

#include<iostream>
#include<conio.h>
#include<ctime>
#include<cstdlib>

using namespace std;

int main()
{
    do
     {
          system("cls");
          srand(time(0));
          int tab[6][6],i,j,sum=0,k=1,p;
          
          for (i=0;i<6;i++)
          for (j=0;j<6;j++)
          {
            tab[i][j]=rand()%10;
            if (i>j)
            {
                    p=tab[i][j];
                    if ((p/p)&&(p/k))
                    sum=sum+tab[i][j];
                    }
          }
            for (i=0;i<6;i++)
            {
                for(j=0;j<6;j++)
                cout<<tab[i][j]<<"\t";
                cout<<"\n";
            }
            cout<<"suma liczb pierwszych pod glowna przekatna wynosi: "<<sum<<"\n";
            cout<<"kontynuowac? T/N?\n";
            }while(toupper(getch())=='T');
}

Proszę o pomoc, inaczej wywalą mnie z budy [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!] [!!!]

1

Szybko, ludzie, kupcie mu łopatę!

0

Ale ten program zupełnie nie robi tego co powinien.
Gdzie ty niby sprawdzasz czy liczba jest pierwsza? o_O Bo chyba nie

 if ((p/p)&&(p/k))

Bo prawdą jest że liczba pierwsza dzieli sie przez siebie i przez 1, ale ważniejsze jest że dzieli sie TYLKO przez te dwie liczby. Żeby sprawdzic czy liczba jest pierwsza musisz sprawdzic (pętlą) czy nie dzieli się przez żadną inną liczbę, np. tak:

bool prime(int liczba)
{
  if(liczba<2)
    return false;
  if(liczba == 2)
    return true;
  if (!(liczba%2))
    return false;

  bool dzielnik = false;
  int pierwiastek=sqrt(liczba);

  for (int i=3;i<=pierwiastek && !dzielnik;i+=2)
    if (!(liczba%i))
      dzielnik=true;
  return !dzielnik;
}
0

No poprawiłem ten program ale tym razem nie sumuje liczb z pod głównej przekątnej, a jak ustawiam i==j to wszystko jest cacy.

#include<iostream>
#include<conio.h>
#include<ctime>
#include<cstdlib>

using namespace std;

int main()
{
    do
     {
          system("cls");
          srand(time(0));
          int tab[6][6],i,j,sum=0,p,l,k;
          
          for (i=0;i<6;i++)
          for (j=0;j<6;j++)
          {
            tab[i][j]=rand()%10;
            if (i>=j)
            {
                    p=tab[i][j];
                    k=0;
                    for(k=1;k<=p;k++)
                    {
                                     if(p%k==0)
                                     l++;
                    }
                    if(l==2)
                    sum=sum+tab[i][j];
                    }
          }
            for (i=0;i<6;i++)
            {
                for(j=0;j<6;j++)
                cout<<tab[i][j]<<"\t";
                cout<<"\n";
            }
            cout<<"suma liczb pierwszych pod glowna przekatna wynosi: "<<sum<<"\n";
            cout<<"kontynuowac? T/N?\n";
            }while(toupper(getch())=='T');
}
</cpp>
0

Ja nie wiem w jakiej ty jestes szkole, ale za taki algorytm sprawdzania czy liczba jest pierwsza jaki wykorzystałeś to ja dałbym z miejsca 2 oceny w dół. Bo w tym zadaniu są 2 "trudności". Pierwsza dotyczy sprawdzania pierwszości liczb, druga przechodzenia po liczbach ponizej przekątnej macierzy.

0

Dziękuje bardzo za pomoc w tym programem. Nie grozi mi więc wywalenie ze szkoły. Jak by co to polecam się w sprawie problemów z grafiką.

0

Ach, kolejny master avatarów i sygnaturek. :>

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