Wątek przeniesiony 2018-11-05 13:05 z C/C++ przez Patryk27.

Rozdzielenie działania pętli

0

W jaki sposób rozdzielić działanie tych dwóch pętli?. Chce aby pierwsza wypisywała wartości c*indeks tablicy, zaś druga po prostu inkrementowała o jeden. Wydaje mi się,że tak napisany program powinien działać po mojej myśli, jednak w oknie, w tej drugiej pętli program bierze pod uwagę liczbę c. Odmienne indeksy tablic( i oraz p) powinny to załatwić, a tak nie jest. Ktoś pomoże?

#include <stdio.h>

#define ROZMIAR_TABLICY 10

int main(void)
{
    int tablica_int[ROZMIAR_TABLICY] = { 0 };
    int c;
    printf("Podaj wartosc:  ");
    scanf("%d", &c);

    for (int p = 0; p < ROZMIAR_TABLICY; p++) {
        tablica_int[p] = c * p;
        printf("petla1: Iteracja %d to tablica_int[%d]= %d\n", p, p, tablica_int[p]);
    }

    for (int i = 0; i < ROZMIAR_TABLICY; i++) {

        printf("Iteracja %d: tablica_int[%d] = %d\n", i, i, tablica_int[i]);
    }
}
1

one sa niezalezne od siebie. W obu forach mozesz miec int i i beda to dwie rozne zmienne

w drugiej petli po prostu wyswietlasz tablice nic wiecej nie robisz

Druga petla nie bierze C pod uwage. To wpisywane liczby do tablicy zaleza od c

tablica_int[p]= c * p;

jak widzisz, do tablicy o indeksie p trafia liczba c * p

0

Nie rozumiem. Co ma być inkrementowane o jeden?

0

nie rozumiem czemu druga petla brała pod uwagę c, jeśli w środku klamry nie było o tym mowy

Bo tablica była utworzona poza klamrami, a więc to, co umieściłaś w niej "w klamrach" w pierwszej pętli były widoczne również poza klamrami, a więc także w drugiej pętli.
Natomiast jeśli chcesz wypisać liczby od 1 do 10 to w printf możesz po prostu użyć i zamiast tab[i], żadna tablica nie jest do tego potrzebna.

0

Dzięki wszystkim. Czy drugą petlę można przedstawić w do..while, w ten sposób?

do
{
    tablica_int[i]=i;
    printf("Iteracja %d: tablica_int[%d] = %d\n", i, i, tablica_int[i]);
    i++;
}while(i<ROZMIAR_TABLICY);

Niestety ale wynikiem tej pętli jest tylko: Iteracja 10: tablica_int[10] = 10

1

Tworzysz tablicę w pamięci, która przechowuje jakieś wartości:

    int tablica_int[ROZMIAR_TABLICY] = { 0 };

Następnie wypełniasz ją czymś, w tym wypadku c*p.
Kluczowy aspekt - nie ma znaczenia czy Twoja zmienna nazywa się p, czy i. Jeśli akurat p jest równe i, to tablica_int[p] będzie równa tablica_int[i], niezależnie od wszystkiego innego. Tak więc najpierw zapisujesz jakieś informacje w pamięci, potem je odczytujesz (dziwiąc się przy tym że są inne niż zera).

0

Czytając między wierszami:

#include <stdio.h>
 
#define ROZMIAR_TABLICY 10

void drukujTablice(int tablica[ROZMIAR_TABLICY])
{
    for (int i = 0; i < ROZMIAR_TABLICY; i++) 
         printf("tablica[%d] = %d\n", i, tablica_int[i]);
}

void zwiekszElementyTablicy(int tablica[ROZMIAR_TABLICY], int d)
{
    for (int i = 0; i < ROZMIAR_TABLICY; i++) 
        tablica_int[i] += d;
}

int main(void)
{
    int tablica_int[ROZMIAR_TABLICY] = { 0 };
    int c;

    drukujTablice(tablica_int);
    printf("Podaj wartosc:  ");
    while (1 == scanf("%d", &c)) {
        zwiekszElementyTablicy(tablica_int, c);
        drukujTablice(tablica_int);
        printf("Podaj wartosc:  ");
    }
}
0

Dzięki za pomoc, jednak w poleceniu muszę przekształcić pętlę for na do..while. Nie chciałabym wprowadzać tylu funkcji void, ale zapisać to jak najprościej możliwe.

Dobrze za prośba: mam przeształcic program wg polecenia:
"6. Zamiana jednej z pętli for na pętle while(...){ ... }, oraz drugiej pętli for na pętlę do{ ... }
while( ... )"

#include <stdio.h>

#define ROZMIAR_TABLICY 10

int main(void)
{
 int tablica_int[ROZMIAR_TABLICY] = {0};
 int c;
 printf("Podaj wartosc:  ");
 scanf("%d",&c);
  
for(int i=0; i<ROZMIAR_TABLICY;i++)
{
tablica_int[i]=i*c;
printf("petla1: Iteracja %d to tablica_int[%d]= %d\n",i,i,tablica_int[i]);
}

for(int i=0; i<ROZMIAR_TABLICY; i++)
  {
tablica_int[i]=i;
   printf("Iteracja %d: tablica_int[%d] = %d\n", i, i, tablica_int[i]);

  }
return 0;
}

0

Pierwsza pętla działa:

#include <stdio.h>

#define ROZMIAR_TABLICY 10

int main(void)
{
 int tablica_int[ROZMIAR_TABLICY] = {0};
 int c;
 printf("Podaj wartosc:  ");
 scanf("%d",&c);
 int i=0;
while (i<ROZMIAR_TABLICY)
{
tablica_int[i]=i*c;
printf("petla1: Iteracja %d to tablica_int[%d]= %d\n",i,i,tablica_int[i]);
i++;
}


lecz zapisujac druga za pomocą do..while

do
 {
tablica_int[i]=i;
 printf("Iteracja %d: tablica_int[%d] = %d\n", i, i, tablica_int[i]);
 i++;
 }while(i<ROZMIAR_TABLICY);
return 0;
}

program drukuje :Iteracja 10: tablica_int[10] = 10

0

Ustaw i na 0.

1 użytkowników online, w tym zalogowanych: 0, gości: 1