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

Podziel tablice na dwie: z liczbami parzystymi i nieparzystymi

Object Storage Arubacloud
0 głosów
430 wizyt
pytanie zadane 31 października 2022 w C i C++ przez patrykpatryczek01 Nowicjusz (200 p.)
Napisz program, który podzieli zadaną tablicę na dwie tablicę. Pierwsza tablica będzie zawierała liczby parzyste, a drugą liczby niepatrzyste.
Mógłby kto sprawdzić czy rozwiązanie jest  w porządku?
#include<stdio.h>
void tablica1(int tab[], int rozmiar, int a[])
{
  int i;
  printf("Liczby parzyste\n");
        for(i=0;i<rozmiar;i++)
                if(tab[i]%2==0)
                {
                  printf("%d\n",tab[i]);
                }
  a[i]=tab[i];
  }
  void tablica2(int tab[], int rozmiar, b[])
  {
    int i;
  printf("Liczby nieparzyste\n");
        for(i=0;i<rozmiar;i++)
                if(tab[i]%2) 
                {
                  printf("%d\n",tab[i]);
                }
    b[i]=tab[i];
  }
int main()
{
  int tab[]={3,4,2,7,2,9};
  int rozmiar=6;
  int a;
  int b;
tablica1(tab, rozmiar,a);
tablica2(tab, rozmiar,b);
  return 0;
}

 

1
komentarz 31 października 2022 przez Oscar Nałogowiec (29,290 p.)

Nie jest w porządku -

  1. trzeci parametr obu funkcji ma być tablicą/wskaźnikiem, więc nie da się przekazać zwykłej zmiennej.
  2. pętle w obu funkcjach: ładnie wypisujesz odpowiednie liczby, ale nic więcej z nimi nie robisz.
  3. A po pętli jakiś element za tablicą przepisuje do tych dziwnych tablic, które są argumentami.

 
W docelowym rozwiązaniu musisz mieć oddzielny indeks do zapisywania tablicy wynikowej, który zwiększasz po każdym zapisie. Indeks tablicy wejściowej != indeks tablicy wyjściowej. Tablica wyjściowa nie będzie większa niż wejściowa.

 

Prościej będzie to zrobić na jakimś wektorze, ale nie podałeś, czy coś takiego już znasz.

 

komentarz 31 października 2022 przez VBService Ekspert (253,340 p.)
edycja 31 października 2022 przez VBService

@Oscar, 

Prościej będzie to zrobić na jakimś wektorze yes

 

@patrykpatryczek01,  możesz w jednej pętli podzielić na parzyste i nieparzyste np.

[ on-line ]

    int rozmiar=6;
    int tab[6]={3,4,2,7,2,9};
    int tab_parzyste[6]={0};
    int tab_nieparzyste[6]={0};
    
    for (int i=0, p=0, np=0; i<rozmiar; i++)
    {
        if (tab[i]%2 == 0)
        {
            tab_parzyste[p++] = tab[i];
        }
        else
        {
            tab_nieparzyste[np++] = tab[i];
        }
    }

 

komentarz 1 listopada 2022 przez j23 Mędrzec (194,920 p.)

@VBService:

printf("Liczby parzyste\n");
pokaz(tab_parzyste, rozmiar);
    
printf("Liczby nieparzyste\n");
pokaz(tab_nieparzyste, rozmiar);

A nie lepiej wykorzystać indeksy p i np, które określają ilość liczb w tablicach, niż świrować z zerem jako terminatorem?

1 odpowiedź

0 głosów
odpowiedź 31 października 2022 przez TOWaD Mądrala (5,700 p.)
edycja 2 listopada 2022 przez TOWaD

Tu poprawiony trochę (w C)

A tu taka wariacja (w 1/2 C++) edit: i poprawiona funkcja:

void settable (int t[], size_t size, int *ptr){
    std::memcpy(t, ptr, size*sizeof(*t));
  return;
}

 

Edit: Przepraszam nie moglem się oprzeć uproszczona wariacja.

komentarz 2 listopada 2022 przez Oscar Nałogowiec (29,290 p.)
Tak się zastanawiam, co w tym przykładzie (poza szczegółami składniowymi) jest z C++, a nie działa w C.
komentarz 2 listopada 2022 przez TOWaD Mądrala (5,700 p.)
#include <iostream> ( cout itd...) i auto.

A tak w ogóle przeczytałem na cppPolska ze modern C++ i C to dwa zupełnie inne języki i chyba coś w tym jest. (niestety nie znam tego modern).

No i tak naprawdę, na to trzeba uważać, bo się można zdziwić jak się różnią.

Podobne pytania

0 głosów
2 odpowiedzi 531 wizyt
pytanie zadane 10 października 2015 w Inne języki przez niewiem17 Początkujący (480 p.)
0 głosów
0 odpowiedzi 145 wizyt
pytanie zadane 11 grudnia 2020 w C i C++ przez Karina126 Początkujący (280 p.)
0 głosów
0 odpowiedzi 275 wizyt
pytanie zadane 11 grudnia 2020 w C i C++ przez Karina126 Początkujący (280 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...