[C] Tablice jednowymiarowe - przypisywanie wartości

kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kuna12345 »

Zadanie z tablicą i pętlami for/while, język C.
a.
Stwórz tablicę 997
elementową
.
b.
Wypełni tablicę wartościami
1 2 3 4 1 2 3 4 1 2 3 4 ...
c.
Wypisz na ekran co 100 element tablicy.
Zrobiłem coś takiego lecz kompletnie źle, jeśli ktoś by wiedział jak to zrobic/poprawić byłbym wdzięczny.

Kod: Zaznacz cały

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

int main()
{
int tab[997];
int i;
for(i=0;i<tab[997];i++)
{
    tab[i]=1;
    tab[i]=2;
    tab[i]=3;
    tab[i]=4;
}
for(i=0;i<997;i++)
    {
     if   (i+1%100==0);
        printf("%d
",i);
    }

    return 0;
}
Ostatnio zmieniony 4 mar 2014, o 20:02 przez Afish, łącznie zmieniany 1 raz.
Powód: Stosuj tagi code.
Awatar użytkownika
niebieska_biedronka
Użytkownik
Użytkownik
Posty: 397
Rejestracja: 8 paź 2011, o 15:31
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 96 razy
Pomógł: 19 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: niebieska_biedronka »

Po pierwsze, i zmienia się od 0 do 996 (gdyby było do 997, miałbyś 998 elementów, licząc od 0); po drugie, zmienia się do 996 a nie tab[996] - zauważ, że zacząłeś od 0, a nie od tab[0]
Po trzecie, w jednej pętli for umieszczasz 4 przypisania liczb do tej samej komórki tablicy... program działa tak, że przypisuje komórce tab[0] liczbę 1, potem 2, 3 i 4. A więc w rezultacie zostanie 4 - i tak dla każdej z 997 komórek. Pomyśl, jak to poprawić
kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kuna12345 »

Doszedłem do czegoś takiego lecz teraz program nawet nie chce sie uruchomic:

Kod: Zaznacz cały

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

int main()
{
int tablica[997];
int a,b,c,d;
int n;

for(a=0;a<=tablica[997];a+=4)
{
    tablica[n]=1;
}
for(b=0;b<=tablica[997];b+=4)
{

    tablica[n]=2;
}
for(c=0;c<=tablica[997];c+=4)
{

    tablica[n]=3;
}
for(d=0;d<=tablica[997];d+=4)
{
    tablica[n]=4;

}
for(n=0;n<tablica[997];n++)
    {
     if   (n+1%100==0);
        printf("%d
",n);
    }

   return 0;
}
Ostatnio zmieniony 5 mar 2014, o 00:02 przez bakala12, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kropka+ »

Czytałaś poprzedni post? Poza tym, teraz dodatkowo w każdej pętli przypisałaś jakąś wartość zmiennej tablica[n]. A co to jest to n??? Przecież w pętlach zmieniają się a,b,c i d.

Pierwsza pętla:

Kod: Zaznacz cały

for (a=1;a<=997;a+=4)
{
     tablica[a]=1;
}
Pozostałe pętle od b=2, c=3 i d=4.
Ostatnio zmieniony 5 mar 2014, o 11:12 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: Afish »

W C elementy tablicy numeruje się od zera, więc indeksy są przesunięte o jeden za daleko.
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kropka+ »

Czyli po for a<=998 a w pętli tablica[a-1]=1.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: Afish »

kropka+, lepiej po prostu iterować po wartościach o jeden mniejszych, a nie bawić się w przeliczanie.
kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kuna12345 »

Poddaje się. Wykona ktoś za mnie punkt b. ?
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: Althorion »

Takie rzeczy to raczej do działu z ogłoszeniami.
kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kuna12345 »

Ja bardzo przepraszam ale próbowałem na każde sposoby, lecz moja wiedza jest jeszcze zbyt uboga.
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kropka+ »

Napisz co się dzieje. Nie wypełniłaś tej tablicy?
kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kuna12345 »

Próbuję teraz w tym kierunku, ale program wyświetla mi tylko wartości co 100, nie widzi jednak wartości 1,2,3,4,1,2,3,4... Nie wiem jak to poprawić...

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
int tablica[997];
int x;
int i;
int main()
{
    while (i <= 996)

    {

for (x = 1; x <= 4; x++)

if (i < 996)

break;

for(x=0;x<997;x++)

    if ((x+1)%100 == 0)
printf(" %d
",x);
   return 0;
}

}
Ostatnio zmieniony 6 mar 2014, o 21:01 przez Afish, łącznie zmieniany 2 razy.
Powód: Stosuj tagi code.
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: kropka+ »

A gdzie masz wypełnianie tablicy?
Masz pętlę for po iksie i każesz drukować co setny iks, to Ci drukuje.
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: Andreas »

1. Rób wcięcia, bo program jest mało czytelny
2. return 0; powinno być na końcu w mainie, a nie w pętli while
3. Niepotrzebnie sprawdzasz czy każdy z 1000 elementów jest tym co setnym. Lepiej tak:

Kod: Zaznacz cały

for (x=0; x<997; x+=100)
        printf("%d
",x);
4. Nie rozumiem po co while (i <= 996). Na początku inicjujesz zmienną i i ona ma wartość 0, więc ten warunek jest zawsze prawdziwy.
5. To powinno działać:

Kod: Zaznacz cały

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

int tablica[997];
int x,i;

int main()
{
    for (i=0; i<997; i+=4)
    {
        tablica[i]=1;
        tablica[i+1]=2;
        tablica[i+2]=3;
        tablica[i+3]=4;
    }

    for (x=0; x<997; x+=100)
        printf("%d. element: %d
",x,tablica[x]);
    return 0;
}

Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Tablice jednowymiarowe - przypisywanie wartości

Post autor: Althorion »

Wydaje mi się że nie. Gdy pętla for wykona się 249. raz, zmienna i będzie wynosić \(\displaystyle{ 996}\). Wówczas warunek dalej jest prawdziwy, więc pętla wykona się po raz kolejny, próbując wstawić wartości do tablica[996] (wszystko w porządku)), ale też i do trzech kolejnych miejsc, co już nie jest poprawne (piszemy poza tablicą).

Znacznie czytelniejszą i mniej podatną na błędy opcją byłoby skorzystanie z reszt z dzielenia.
ODPOWIEDZ