• 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?

0 głosów
9,408 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,920 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,570 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,440 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,600 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 293 wizyt
pytanie zadane 20 listopada 2022 w C i C++ przez Kasandi Nowicjusz (130 p.)
0 głosów
1 odpowiedź 653 wizyt
0 głosów
1 odpowiedź 1,046 wizyt

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 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.

...