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

Wyświetla mi 2 dziwne błędy przy tworzeniu tablicy dwuwymiarowej.

Object Storage Arubacloud
0 głosów
623 wizyt
pytanie zadane 15 listopada 2016 w C i C++ przez niezalogowany
edycja 15 listopada 2016

Witam :)

Jestem tutaj nowy. Szukałem rozwiązania mojego problemu zarówno przez wyszukiwarkę google i tutaj ale stricte problemu jak u mnie nie znalazłem Dopiero się uczę języka C++ z książki i skończyłem rozdział o pętlach. Teraz mam zrobić program, który za pomocą zagnieżdzonych pętli ma poprosić o liczbę wyświetlanych wierszy. Potem mam wykonać pętlę, która taką tabelkę pokaże:

. . . . *

. . . * *

. . * * *

. * * * *

* * * * *

Jak pisze to mam takie błędy, których nie rozumiem. Bazuje na jedynym przykładzie i na nim nie ma takich problemów. Próbowałem z const w linijce, gdzie jest pierwszy błąd i bez tego. Przy 2. błędzie dodawałem też " " i ' ', ale to też nie pomogło. Proszę o wytłumaczenie co robię nie tak i o co chodzi tym błędom, szczególnie o tym drugim.

komentarz 15 listopada 2016 przez niezalogowany
edycja 15 listopada 2016

W ostatnie linii nie powinno być przecinka, a więc:

    wchar_t wymiar2[liczba][liczba] =
    {
        {'.', '.', '.', '*', '*'},
        {'.', '.', '*', '*', '*'},
        {'.', '*', '*', '*', '*'},
        {'*', '*', '*', '*', '*'}
    };

Tutaj też:

    char wymiar[liczba] = "....*"; // inna forma zapisania:
  /*{
    "."
    "."
    "."
    "*"
    }
   */
// do char'ów używa się ' '
// gdy używasz " " tworzysz string 
// jest różnica pomiędzy użyciem ' ', a " "

 

Co nie zmienia faktu, że dalej uzupełniasz identyczną liczbę elementów, i dla np liczba=4 złapiesz crasha

komentarz 15 listopada 2016 przez niezalogowany
edycja 15 listopada 2016
jak tam daje " " to mam błąd, że niiby C++11 nie może przekonwertować z string na char * choć nigzie nie mam wykorzystanego stringa ...

Jak zamiast liczba w [] daje 5 to jakoś działa ale wpisanie cyfry np. 3 nie powoduje, że wyświetli 3 wiersze.

To co mam zrobić? Bo piszesz tylko że mam źle.
komentarz 15 listopada 2016 przez niezalogowany

Jak wrzucasz informacje że masz błędy to podawaj numery linii...

W dodatku nie słuchasz, patrz mały PoC tego co ci ciągle powtarzam:

$ cat test.cpp
int main()
{
  const int n = 5;
  char dim[] = "...*"; // wazne 5 znakow!
  char dim2[n][n] = {          // WAZNE!
    {'.', '.', '.', '.', '*'}, // tutaj masz 5 wierszy
    {'.', '.', '.', '.', '*'}, // dokladnie po 5 elementow
    {'.', '.', '.', '.', '*'}, // czyli dokladnie tyle
    {'.', '.', '.', '.', '*'}, // ile wynosi n
    {'.', '.', '.', '.', '*'}  //
  };

  return 0;
}
$ g++ -std=c++11 -o test test.cpp
$ ./test
$ echo $?
0

 

komentarz 15 listopada 2016 przez niezalogowany
Sorry zmęczony jestem już tym zadaniem a robie je od rana.
komentarz 15 listopada 2016 przez niezalogowany
Oto treść zadania:

Napisz program, który za pomocą zagnieżdzonych  pętli poprosi użytkownika o podanie liczby wyświetlanych wierszy. Następnie pokaż żadaną liczbę wierszy z gwiazdkami: jedna gwiazdka w pierwszym wierszu, dwie w drugim itd. Poniżej gwiazdki są poprzedzone dopełnieniami - kropkami pozwalającymi ustalić liczbę wierszy. Oto przykładowy wynik działania programu:

Podaj liczbę wierszy: 5

. . . . *

. . . * *

. . * * *

. * * * *

* * * * *

Napisałem na  wszelki wypadek gdybyś inaczej zrozumiał niż to co napisałem. NIe chodzi mi oczywiście, że nie potrafisz czytać ze zrozumieniem bo może sam nadałem inny sens pisząc na początku.

1 odpowiedź

0 głosów
odpowiedź 15 listopada 2016 przez niezalogowany
wybrane 20 listopada 2016
 
Najlepsza

Zrobiłeś to co większość początkujących, tzn przekombinowałeś - nie potrzebujesz do tego zadania tablic.

Jednym z wariantów tego zadania jest napisania programu drukującego trójkąt:

# n = 5
*
**
***
****
*****

Do wariantu, który przedstawiłem wystarczy dodać warunek aby uzyskać wariant z uzupełnieniem, aby nie psuć ci zabawy przedstawię gotowe rozwiązanie (w C) wersji bez dopełnienia, a Ty postaraj się na tej podstawie wykonać swoje zadanie:

/* Kompilacja i przyklad uruchomienia:
$ gcc nopadding.c -std=c89 -o nopadding
$ ./nopadding
7
*
**
***
****
*****
******
*******
*/

#include <stdio.h>

int main(void)
{
  /* wczytanie liczby wierszy */
  int n;
  scanf("%d", &n);

  /* drukowanie trojkata */
  int i, j;
  for(i=1; i<=n; ++i)
  {
    for(j=1; j<=i; ++j)
    {
      /* TODO miejsce gdzie trzeba dodac warunek
         dla wersji z dopelnieniem */
      printf("*");
    }
    printf("\n");
  }

  return 0;
}

 

komentarz 15 listopada 2016 przez niezalogowany
scanf("%d", &n); to inaczej cin >> n; , a printf("*") to cout << "*", nie?
komentarz 15 listopada 2016 przez niezalogowany

Jeżeli pytasz o rezultat działania, to tak. Mogłeś to bardzo łatwo sprawdzić poprzez wyszukanie nazw tych metod w wyszukiwarce, albo nawet u siebie lokalnie na komputerze z terminala, np:

$ man printf

 

komentarz 15 listopada 2016 przez niezalogowany
Gdzieś w ksiązce o tym pisało, więc chciałęm się upewnić czy to są odpowiedniki w c++.
komentarz 15 listopada 2016 przez niezalogowany
Nie rozumiem tego:

Do wariantu, który przedstawiłem wystarczy dodać warunek aby uzyskać wariant z uzupełnieniem.

Poszukałem co to jest wariant z uzupełnieniem i napknąłem się na funkcje i if. Obu niestety jeszcze nie miałem.

O co tu chodzi?

/* TODO miejsce gdzie trzeba dodac warunek

         dla wersji z dopelnieniem */

Co to wersja z dopełnieniem?
komentarz 15 listopada 2016 przez niezalogowany
W tym rozdziale miałem tylko o pętli for i troszeczkę o while, do while i zakresowej pętli for i tablicy dwuwymiarowej. Ostatnie to 2 strony, a 2 poprzednie razem 1-1,5 strony. W poprzednim podstawy tablicach; łańcuchach,; klasie string, vector i array; strukturach; literałach napisowych i o wskaźnikach (najpierw podstawowe informacje, a potem wykorzystywanie wskaźników z tablicami, łańcuchami i strukturami). Przed tym wszystkim miałem kompletne podstawy oraz typy proste.
komentarz 15 listopada 2016 przez niezalogowany

"Wariant z uzupełnieniem" to kod który generuje taki output:

. . . . *

. . . * *

. . * * *

. * * * *

* * * * *

A instrukcje if musiałeś mieć skoro masz już pętle, nie idzie tego obejść

komentarz 15 listopada 2016 przez niezalogowany
NIestety mam mieć dopiero w następnym :/

Uczę się z "Język C++. Szkoła programowania" Praty. Z helion.pl możesz zobaczyć sobie spis treści jeśli chcesz. Jestem jakby co na piątym rozdziale.
komentarz 15 listopada 2016 przez niezalogowany
Inaczej tego się nie da zrobić? Najlepiej najlepiej jak najprościej się da, abym wiedział co i jak się dzieje :)

Dzięki, że próbujesz mi pomóc :)

P.S. Jakby co odpisze jutro :)
komentarz 15 listopada 2016 przez niezalogowany
edycja 15 listopada 2016

if to część składowa pętli więc mają dziwne podejście...

Da się, ale jest to straszny workaround: ani to uczy dobrego podejścia do problemu, ani nie uczy niczego sensownego.

Poniżej jak wyglądałby kod z if'em:

#include <stdio.h>

int main(void)
{
  /* wczytanie liczby wierszy */
  int n;
  scanf("%d", &n);

  /* drukowanie trojkata */
  int i, j;
  for(i=1; i<=n; ++i)
  {
    for(j=1; j<=n; ++j) /* zamiana <=i, na <=n */
    {
      if (n-j > i-1) /* dodany warunek */
        printf(".");
      else
        printf("*");
    }
    printf("\n");
  }

  return 0;
}

 

komentarz 20 listopada 2016 przez niezalogowany
Dzięki :) Sorry, że tak późno, ale byłem zbyt zajęty :/

Podobne pytania

0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 22 listopada 2018 w C i C++ przez Wiktor Panecki Użytkownik (920 p.)
0 głosów
0 odpowiedzi 181 wizyt
pytanie zadane 5 października 2018 w Ogłoszenia, zlecenia przez acmilaneo Nowicjusz (120 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 22 grudnia 2018 w C i C++ przez Wiktor Panecki Użytkownik (920 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...