• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

3 zadania [c++]

0 głosów
469 wizyt
pytanie zadane 2 września 2019 w C i C++ przez udj92026 Nowicjusz (120 p.)
1.
int** matrix(int size){
  int **tab = new int *[size];
  for(int i=0; i<size; i++)
    tab[i]=new int[size];}  
  int x=1;
  for(int i=0;i<size;i++)
   for(int j=0;j<size;j++){
      tab[i][j]=x;
      x=x+2;}
   x=x+8;}
return tab;}
int main(){
int size=4;
matrix(size);
for(int i=0;i<size;i++)
   for(int j=0;j<size;j++)
      cout<<tab[i][j];
return 0;}

2.
bool check(int *tab, int size, int x){
bool b;
for(int i=0; i<size; i++){
   if(x=tab[i]){
      b==true;break;}
   else
      b==false;}
return b;}

3.
struct str{
 int a;
 int b;};
struct str fun(int *tab, int size){
str s;
bool b=true;
while(b){
   b=false;
   for(int i=0; i<size;i++){
      if(tab[i+1]!=size){
         if(tab[i]>tab[i+1]){
	int j=tab[i];
	tab[i]=tab[i+1];
	tab[i+1]=j;
	b=true;}}}}
s.a=tab[1];
s.b=tab[size-2];
return s;

Cześć! Mam 3 zadania i powyżej znajduje się moje rozwiązanie, czy mógłby ktoś przelecieć i powiedzieć mi gdzie są błędy? Polecenia są tutaj:

dziękuję za każdą pomoc

1 odpowiedź

+1 głos
odpowiedź 2 września 2019 przez Szfierzak Gaduła (3,750 p.)
Wstaw kod w bloczek c/c++, w plaintext czyta się to średnio. Pierwsze co rzuca się w oczy to:

Zad 1)

Nie zwalniasz pamięci.

Przechodząc do wypełniania kolejnego wiersza tablicy dodajesz x = x+8; Myślę, że zgodnie ze schematem powinieneś dodawać 10.

zad 2)

w If'ie nie sprawdzasz, czy wartość x jest równa tab[i] tylko przypisujesz tą wartość do x. Powinieneś użyć operatora == zamiast =.

Dalej zmienną typu bool porównujesz z wartością tab[i], czyli tym razem na odwrót zamiast = jest ==.

Poza tym wiedząc, że tablica jest posortowana, można trochę zoptymalizować kod, żeby nie przeszukiwał całej tablicy.

Zad 3)

Twoja funkcja nie jest odpowiedzią na zadanie. Niepotrzebnie zamieniasz elementy w tablicy, to nie pomoże. Masz znaleźć drugą największą i najmniejszą wartość. Do znalezienie najmniejszego elementu wystarczy prosty warunek podobny do tego z zadania drugiego. Do znalezienia drugiego największego elementu powinieneś zapamiętywać też największy i jak znajdziesz największy to aktualizować sobie wartości obu.
komentarz 2 września 2019 przez udj92026 Nowicjusz (120 p.)
W pierwszym według polecenia nie ma w treści, żeby ją zwolnić, no ale fakt, że jedno z drugiego powinno wynikać.

W drugim racja, zamieniłem = z ==.

Masz pomysł kodu na to trzecie? Siedzę nad tym i motam się
komentarz 3 września 2019 przez Szfierzak Gaduła (3,750 p.)

Wystarczy, że w pętli, analogicznej jak w zad 2, będziesz sprawdzał warunki na najmniejszy element np:

if( smallest > tab[i] )
  smallest = tab[i];

i na dwa największe elementy np:

if( largest < tab[i] )
{
  secondLargest = largest; //tutaj przypisujesz do drugiej największej wartości poprzednią największą
  largest = tab[i]; //tutaj zapisujesz sobie aktualnie największą
}

Zgodnie z treścią zadania interesują Cię wartości smallest i secondLargest.

Podobne pytania

–4 głosów
1 odpowiedź 820 wizyt
pytanie zadane 19 czerwca 2019 w Ogłoszenia, zlecenia przez xbx13293 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 348 wizyt
pytanie zadane 14 grudnia 2016 w C i C++ przez Programator Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,785 wizyt
pytanie zadane 29 listopada 2017 w C i C++ przez necik Początkujący (430 p.)

93,753 zapytań

142,713 odpowiedzi

323,356 komentarzy

63,347 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...