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

[C] Jak wypełnić tablicę liczbami w następujący sposób?

Object Storage Arubacloud
0 głosów
8,094 wizyt
pytanie zadane 2 kwietnia 2016 w C i C++ przez programmero Bywalec (2,420 p.)

Moglibyście podpowiedzieć jak napisać funkcję która wypełni tablicę 10 elementów następującymi liczbami 1 3 5 7 9 10 8 6 4 2.

Dzielenie modulo? Myślę, myślę i nie mogę wymyślić :( 

Wychodzę z tego

void make_tab(int tab[], int tab_size)
{
	int i;
	for (i = 0; i < tab_size; i++)
	{
		tab[i] = i;
	}
}

6 odpowiedzi

+1 głos
odpowiedź 2 kwietnia 2016 przez Porcupine Nałogowiec (31,560 p.)
wybrane 3 kwietnia 2016 przez programmero
 
Najlepsza
Tak właściwie to najprościej tak:

int tab[] = {1, 3, 5, 7, 9, 10, 8, 6, 4, 2};

Ale takie bardziej oczekiwane rozwiązanie to prawdopodobnie rozbicie problemu na dwie części:

Tworzysz zmienną np. int val = 1;
W pętli od 0 do 5 do kolejnych komórek tablicy wpisujesz val, po czym zwiększasz wartość val o dwa;
Następnie po skończeniu pętli przyjmujesz val = 10;
I w drugiej pętli idącej od 5 do 10 robisz dokładnie to samo tylko, że zmniejszając val w każdym przebiego o dwa.

Pozdrawiam,
komentarz 3 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Bardzo mi pomogłeś. Zastosowałem się do rady i napisałem :)
+1 głos
odpowiedź 2 kwietnia 2016 przez jpacanowski VIP (101,940 p.)

Nie lepiej tak?

int tab[10] = {1, 3, 5, 7, 9, 10, 8, 6, 4, 2};
komentarz 2 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Obawiam się, że taki zapis może nie przejść.
komentarz 2 kwietnia 2016 przez criss Mędrzec (172,590 p.)
Prosisz o pomoc, a potem ją kwestionujesz XD serio ... ;_; Dlaczego mialby nie przejść
komentarz 3 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Profesor pewnie nie pozwoli na taki prosty zapis xD Patrz z szerszej perspektywy. Dopytam się jutro jak go spotkam.
+1 głos
odpowiedź 2 kwietnia 2016 przez mariush Dyskutant (7,860 p.)

Jeśli tak bardzo chcesz to robić pętlą to wykonuj ją 5 razy (w przypadku 10 elementów tablicy) i w każdej iteracji wstawiaj element na pozycji i oraz 9-i.

+1 głos
odpowiedź 3 kwietnia 2016 przez Bondrusiek Maniak (61,370 p.)

Witam serdecznie,

oto mój pomysł na rozwiązanie problemu. Zauważ, że pierwsza połowa ciągu jest nieparzysta i rosnąca 1 3 5 7 9 czyli liczba%2>0 natomiast druga połowa jest parzysta i malejąca 10 8 6 4 2 więc liczba%2==0.

Oto moja funkcja, która rozwiązuje problem.

#include <iostream>

using namespace std;
void wypelnij(int tablica[], int ilosc_miejsc);

int main(int argc, char *argv[])
{

    const int ilosc_miejsc = 10;
    int tablica[ilosc_miejsc];
    wypelnij(tablica,ilosc_miejsc);

  for(int i=0; i < ilosc_miejsc ; i++)
        cout << tablica[i] << endl;
    return 0;
}


void wypelnij(int tablica[] , int ilosc_miejsc)
{
    int index_tablicy = 0 ;
    for(int numer = 1 ; numer <= ilosc_miejsc; numer++)
    {
        if(numer%2)
        {
            tablica[index_tablicy++]= numer ;
        }
    }
    for(int numer = ilosc_miejsc ; numer>=1 ; numer--)
    {
        if(!(numer%2))
        {
            tablica[index_tablicy++] = numer ;
        }
    }
}

 

+1 głos
odpowiedź 3 kwietnia 2016 przez Avernis Nałogowiec (27,400 p.)
#include <iostream>

void makeTab(int tab[])
{
	int i = -1;

	for(int j = 0; j < 5; j++)
	{
		i += 2;
		tab[j] = i;
	}
    int i2 = 12;
	for(int j = 5; j < 10; j++)
	{
		i2 -= 2;
		tab[j] = i2;
	}
}

int main()
{
	int tab[10];
    makeTab(tab);

    for(int i = 0; i < 10; i++)
		std::cout << tab[i] << std::endl;

    return 0;
}

Trzeba użyć 2 pętli. 1 dodaje, 2 odejmuje  

komentarz 3 kwietnia 2016 przez niezalogowany
Nie trzeba używać 2 pętli. Wystarczy 1
komentarz 3 kwietnia 2016 przez Avernis Nałogowiec (27,400 p.)
Ja użyłem 2, tak dla wygody
komentarz 3 kwietnia 2016 przez niezalogowany
Nie widzę w użyciu 2 pętli żadnej wygody, ale OK
komentarz 3 kwietnia 2016 przez Avernis Nałogowiec (27,400 p.)
Wiem, można to było zrobić ifami jeśli j jest mniejsze od 5 to dodaje, jeśli większe to odejmuje
komentarz 3 kwietnia 2016 przez niezalogowany
Nie trzeba if'ów.
komentarz 3 kwietnia 2016 przez Avernis Nałogowiec (27,400 p.)
To nie wiem, to są moje pomysły, ale ważne że działają
komentarz 3 kwietnia 2016 przez programmero Bywalec (2,420 p.)

Zrobiłem podobne rozwiązanie do twojego według sugestii Porcupine :)

0 głosów
odpowiedź 3 kwietnia 2016 przez Dubgron Mądrala (5,620 p.)

Siema. Nie znam się za bardzo na języku C, preferuje C++, ale takie coś powinno zadziałać: 

void make_tab(int tab[], int tab_size)
{
    int i;
    for (i = 0; i < tab_size; i++)
    {
        if(i<=4) tab[i] = 2*i+1;
        else if(i>5) tab[i] = -2*i+20;
        else tab[i] = i+5;
    }
}

Mam nadzieję, że pomogłem. Pozdrawiam.

Podobne pytania

0 głosów
0 odpowiedzi 164 wizyt
pytanie zadane 20 listopada 2022 w C i C++ przez Kasandi Nowicjusz (130 p.)
0 głosów
1 odpowiedź 387 wizyt
0 głosów
1 odpowiedź 642 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

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

...