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

tablica dwuwymiarowa sumowanie wyrazow parzystych i nieparzystych

Object Storage Arubacloud
0 głosów
2,794 wizyt
pytanie zadane 29 października 2017 w C i C++ przez st3pa Nowicjusz (150 p.)
edycja 30 października 2017 przez criss

Proszę napisać program w którym zdefiniowana będzie tablica
dwuwymiarowa 10x10, przechowująca liczby całkowite, zainicjowana
samymi zerami. Następnie proszę do niej wprowadzić liczby losowe
z przedziału [0..9] i wyświetlić jej zawartość oraz
sumę elementów o wartościach parzystych
sumę elementów o wartościach nieparzystych

napisałem coś takiego i nie wiem co począć dalej, przy sumach wyskakują mi jakieś losowe liczby, prosiłbym o szybka pomoc

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
   int tab[10][10]; // deklaracja zmiennej tablicowej
   int i,j,h,k, sumap, suman;

   for(i=0; i<10; i++)      //pętla pierwsza
   {
      for(j=0; j<10; j++)      // pętla druga
         tab[i][j]= rand() %10;// wczytanie liczb do macierzy

   }
  printf("\n liczby wypisane z tablicy : ");

   for(h=0; h<10; h++) // pętla trzecia
   {
      printf("\n");
      for(k=0; k<10; k++) // pętla czwarta
          printf("%d, ",tab[h][k]);
      if(tab[i][j]%2==0)
      {
         sumap+=tab[h][k];
       }else suman+=tab[h][k]; // wypisanie liczb z macierzy
   }
   printf("\nSuma parzystych: %d\n", sumap);
   printf("Suma nieparzystych: %d\n", suman);

   return 0;
}
1
komentarz 30 października 2017 przez Kodeman Gaduła (4,480 p.)

Od siebie jeszcze dodam, że możesz używać takiego wyrażenia, do sprawdzania parzystości

if((liczba & 1) == 1)

Sprawdza ona ostatni bit liczby, jeśli jest 1, to liczba nie parzysta, jeśli 0, to parzysta.

Jest to o wiele szybsza operacja niż modulo, ale to tylko ciekawostka, bo w programach o takiej wielkości różnicy nie zrobi. ;)

3 odpowiedzi

0 głosów
odpowiedź 30 października 2017 przez criss Mędrzec (172,590 p.)
Zainicjalizuj sumap i suman zerem. Bez przypisania jakiejś wartości, znajdą się tam "śmieci" - spróbuj wyprintować teraz zaraz po deklaracji. I w ogóle wszystkim zmiennym, bez względu co się z nimi potem dzieje, nadawaj na start jakąś wartość - kod będzie bezpieczniejszy.
0 głosów
odpowiedź 30 października 2017 przez Bondrusiek Maniak (61,370 p.)

Witam,

po pierwsze przypisz zmiennym wartości tak aby uniknąć śmieciowych wartości. Linia 8

int i = 0 ,j = 0,h = 0,k = 0, sumap = 0, suman = 0;

następnie popraw indeksy w pętli for. Linia 24. zauważ że w pętli for przechodzisz po zmiennych h i k a odwołujesz się do i, j

   for(h=0; h<10; h++) // pętla trzecia
   {
      printf("\n");
      for(k=0; k<10; k++) // pętla czwarta
          printf("%d, ",tab[h][k]);
      if(tab[i][j]%2==0) // czemu tu przyrównujesz używając zmiennych i oraz j
      {
         sumap+=tab[h][k];
       }else suman+=tab[h][k]; // wypisanie liczb z macierzy
   }

Tutaj mój poprawiony kod. Może Ci pomoże. Pozdrawiam

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
   int tab[10][10]; // deklaracja zmiennej tablicowej
   int i = 0 ,j = 0,h = 0,k = 0, sumap = 0, suman = 0;

   for(i=0; i<10; i++)      //pętla pierwsza
   {
      for(j=0; j<10; j++)      // pętla druga
         tab[i][j]= rand() %10;// wczytanie liczb do macierzy

   }
  printf("\n liczby wypisane z tablicy : ");

   for(h=0; h<10; h++) // pętla trzecia
   {
      printf("\n");
      for(k=0; k<10; k++)
      { // pętla czwarta
              printf("%d, ",tab[h][k]);
          if((tab[h][k]%2)==0)
          {
             sumap+=tab[h][k];
           }
          else
          {
              suman+=tab[h][k]; // wypisanie liczb z macierzy
          }
      }
   }
   printf("\nSuma parzystych: %d\n", sumap);
   printf("Suma nieparzystych: %d\n", suman);

   return 0;
}

 

0 głosów
odpowiedź 30 października 2017 przez mokrowski Mędrzec (155,460 p.)

Traktuj jako sugestie....

1. Proponuję potraktować tablicę jako ciągłą przestrzeń 100 int'ów (10 x 10). Tylko w trakcie prezentacji masz konieczność wydzielania kolumn i wierszy. Takie podejście powoduje także szybszy dostęp do danych ze względu na trafianie w cache (choć dla 100 elementów to jest na wyrost ale warto przećwiczyć :-) ).

2. Tablicę wyczyścić możesz przez memset() z <string.h>. Będzie szybsze niż ręczne budowanie pętli (lub 2) for.

3. Brak inicjalizacji generatora liczb losowych. Użyj srand(...) tylko 1 raz przed wywołaniami random().

4. Zwróć uwagę że wszelkiego rodzaju indeksy do tablic, nie są typu int tylko size_t.

5. Język C nie dopuszcza int main(). Standard C (C11) dopuszcza jedynie:

int main(void);
int main(int argc, char* argv[]);

6. Warto wyrabiać sobie nawyk zwracania EXIT_SUCCESS z nagłówka <stdlib.h> z return main.. 

7. Może warto wydzielić funkcje wykonujące operacje? Tak aby main wyglądał jak coś co ma rzeczywiście robić w sensie logiki samych kroków zadania?

8. Co Ci mówią komentarze "pętla czwarta"? One się nie odnoszą w żaden sposób do treści zadania.

9. Po policzeniu liczb parzystych, ilość liczb nieparzystych to różnica z maksymalną ilością liczb w tabeli. Nie ma sensu liczyć tego 2 razy. Tak "w trakcie" jak i przy użyciu oddzielnych pętli iterujących po danych z tabeli.

Podobne pytania

0 głosów
3 odpowiedzi 6,220 wizyt
0 głosów
3 odpowiedzi 4,836 wizyt
pytanie zadane 28 grudnia 2016 w C i C++ przez szejmys Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 5,603 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...