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

Pętla zagnieżdżona -problem z jej zrozumieniem

VPS Starter Arubacloud
0 głosów
396 wizyt
pytanie zadane 25 lutego 2018 w C i C++ przez Piotr_Minda Początkujący (380 p.)
edycja 25 lutego 2018 przez Piotr_Minda

Witajcie, tak wiem nie powinienem poruszać tego tematu, tylko sam go rozwiązać, ale siedzę nad zadaniem domowym już dobre 5h i za skarby świata nie mogę zrozumieć, działania pętli for w tym kodzie.

Zadanie polega na tym, że muszę wypisać znaki tablicy ANSI używając pętli for zagnieżdżonej,

Więc do rozwiązania  tej części zadania, użyłem rzutowania inta na char, aby cokolwiek mi wypisał.

#include <iostream>
#include <cmath>
#include <conio.h>

using namespace std;

int main()
{
        for (int i = 32; i < 256; i += 4) // pętla for która zwraca liczby w przedziale od 32 do 256;
            {
                  for (int a = 1; a <= 1; ++a)  //pętla for zagnieżdżona która ma wypisać tablicę ansi;
                          {
                                     cout<<char(i)<<"        "<<i;
                          }
             }
}
getch();
return 0;

program się kompiluje, wyświetla znaki tablicy, ale nie wszystkie

Przykładowo 32, 36, 40 w odstępach co 4, gdzie zrobiłem błąd?  Dziękuję serdecznie za naprowadzenie mnie na właściwy tok rozumowania. Pozdrawiam Piotr!

komentarz 25 lutego 2018 przez Patrycjerz Mędrzec (192,340 p.)
Opublikuj najpierw kompilujący się kod. Ten ma masę błędów składniowych.
komentarz 25 lutego 2018 przez Piotr_Minda Początkujący (380 p.)
To jest własnie ten kod, cały.
komentarz 25 lutego 2018 przez Patrycjerz Mędrzec (192,340 p.)

program się kompiluje

To jest niemożliwe. Najprawdopodobniej kod z posta nie jest tym, który kompilowałeś.

komentarz 25 lutego 2018 przez Piotr_Minda Początkujący (380 p.)
edycja 25 lutego 2018 przez Piotr_Minda

Naprawdę mam załączyć screen?

komentarz 25 lutego 2018 przez Patrycjerz Mędrzec (192,340 p.)

Ale niczego mi nie musisz udowadniać. Ten kod nie skompiluje się z dwóch powodów:

  1. Po rzutowaniu char(i) brakuje operatora <<.
  2. Wywołanie funkcji getch i return jest poza ciałem jakiejkolwiek funkcji. Tylko deklaracje w takim obszarze są dozwolone.

Najprawdopodobniej więc wydaje ci się, że kompilujesz ten kod. Nie wiem jak, ale tak to wygląda. 

1
komentarz 25 lutego 2018 przez Patrycjerz Mędrzec (192,340 p.)
Tak jak sądziłem, kod z posta różni się od tego kompilowanego.
komentarz 25 lutego 2018 przez Piotr_Minda Początkujący (380 p.)
edycja 25 lutego 2018 przez Piotr_Minda

@Patrycjerz,  Poprawiłem go, bo wiesz co, klawiatura coś nie łączy mi chyba, albo za szybko pisałem. teraz na 100% powinno być ok, Przepraszam najmocniej.

1 odpowiedź

+1 głos
odpowiedź 25 lutego 2018 przez Paweł Dymek Bywalec (2,300 p.)
wybrane 25 lutego 2018 przez Piotr_Minda
 
Najlepsza

for (int i = 32; i < 256; i += 4)

Z każdym obiegiem pętli zwiększasz zmienną  " i " o  4 więc pokazuje się co 4. Zmienisz na 2 to będzie co 2, dasz po prostu i++ to będzie wywalało wszystkie. Nie pojmuję czego nie rozumiesz.

PS. kod się nie skompiluje, prawdopodobnie poprawiles go u siebie po wklejeniu tutaj dlatego Ci sie skompilowal.

getch();
return 0;

powinny byc nad ostatnią klamerką, a tutaj

cout<<char(i)"        "<<i;

zjadłeś << po char(i).

 

Co do Twojej pętli zagnieżdżonej to jest ona bez sensu kompletnie, po pierwsze nie jest ona potrzebna do zrealizowania tego zadania (przynajmniej wg treści owego zadania, którą przedstawiłeś, a po drugie jest zrealizowana tak, że zawsze wykona się raz przy każdym obiegu pętli wyżej. Wypisując znaki odwołujesz się do zmiennej i, którą jak wspomniałem zwiększasz o 4 z każdym obiegiem, stąd co czwarty znak jest wypisywany. 

 

Możesz pozornie znaleźć zastosowanie dla zagnieżdżonej pętli, chociaż nikt normalnie by tak tego pewnie nie robił:

#include <iostream>
#include <cmath>
#include <conio.h>
 
using namespace std;
 
int main()
{
        for (int i = 32; i < 256; i += 4) // pętla for która zwraca liczby w przedziale od 32 do 256;
            {
                  for (int a = i; a < i+4; ++a)  //pętla for zagnieżdżona która ma wypisać tablicę ansi;
                          {
                                     cout<<a<<" "<<char(a)<<"        ";
                          }
                          cout<<endl;
             }
    getch();
    return 0;
}

 W takim przypadku używasz pętli zagnieżdżonej do wypisywania linijki (4 pozycji) a potem dajesz endl;, główna pętla przesuwa zmienną o 4. Takie zastosowanie na siłę.

komentarz 25 lutego 2018 przez Piotr_Minda Początkujący (380 p.)
Chyba masz rację, zmyliła mnie ta 4. Ponieważ prawie identyczna pętla była omawiana w rozdziale o rzutowaniu i tam własnie było podobnie z tą różnicą, że było tam 8 a nie 4 i tak się zastanawiałem, czy faktycznie tak ma być, czy nie

btw, edukuje się z podręcznika od zera do gier kodera bardzo fajny podręcznik i tam właśnie dostrzegłem tę różnicę, szlifuje podstawy, środowiska RAD studio i inne odstawiłem na bok najpierw podstawy, a później programowanie obiektowe.

Sprawdzę to.
komentarz 25 lutego 2018 przez Paweł Dymek Bywalec (2,300 p.)

BTW, kod który robie to samo, ale o połowe krótszy

#include <iostream>
using namespace std;
int main()
{
    for (int i = 32; i < 256; i++) // pętla for która zwraca liczby w przedziale od 32 do 256;
        cout<<(i%4==0?"\n":"")<<i<<" "<<char(i)<<"        ";
    return 0;
}

 

komentarz 25 lutego 2018 przez Piotr_Minda Początkujący (380 p.)
Zadziałało, ehh dobrze kombinowałem z tym zagnieżdżeniem pętli for, ale skoro tak w podręczniku było to wolałem się tego trzymać. A i też to zagadnienie może być pomocne dla potomnych. Serdecznie dziękuję na naprowadzenie mnie w tej kwestii.

Podobne pytania

0 głosów
2 odpowiedzi 828 wizyt
pytanie zadane 24 lutego 2018 w JavaScript przez patrykps Nowicjusz (140 p.)
+1 głos
2 odpowiedzi 163 wizyt
0 głosów
0 odpowiedzi 102 wizyt

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...