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

Jak zmodyfikować ten program, tak aby to użytkownik deklarował ilość elementów tablicy?

Object Storage Arubacloud
+1 głos
269 wizyt
pytanie zadane 19 kwietnia 2021 w C i C++ przez EMUSING Początkujący (270 p.)
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int tablica[10];

int main()
{

    srand(time(NULL));

    for (int i=0; i<10; i++)

        {
         tablica[i] =-5+rand()%36;

        cout <<tablica[i]<< endl;
        }
    for (int i=0; i<10; i++)
    {
        cout <<"tablica["<<i<<"]="<<tablica[i]<<endl;
    }
    system("PAUSE");
    return 0;
}

Jak zmodyfikować ten program, tak aby to użytkownik deklarował ilość elementów tablicy?

1 odpowiedź

0 głosów
odpowiedź 19 kwietnia 2021 przez VBService Ekspert (253,300 p.)
edycja 19 kwietnia 2021 przez VBService

Użyj np.: std::cin

#include <iostream>

. . .

int main()
{
     int x;

     . . .

     std::cin >> x;

     int tablica[x]; // lub int tablica[x] = {0};

     . . .

     for (int i=0; i<x; ++i) 
     {
       . . .     
     }

     . . .
}

 

komentarz 20 kwietnia 2021 przez tkz Nałogowiec (42,000 p.)
Kompilator C++ zakłada, że wiesz, co robisz i dlaczego. Odrzuca możliwość, że programista może popełnić błąd. Spróbuj podzielić coś przez 0 w C++ i Javie. Dzięki takiemu działaniu redukujemy pewny narzut. Zauważ również, że wycieki pamięci też nie są zgłaszane przez kompilator. To tak z grubsza i ogólnie.

Co do VLA, kompilator jojczy na to, spójrz https://godbolt.org/z/cPnT4jxqE
komentarz 20 kwietnia 2021 przez VBService Ekspert (253,300 p.)
edycja 20 kwietnia 2021 przez VBService

A tu: 

https://godbolt.org/z/qT78YdfPs ?  wink

bez (jakoś nie "jojczy" ? smiley )

Panowie:

@mokrowski i @tkz - jak chcecie Mnie "disować", to ustalcie jakąś wspólną wersję.  wink

Tak żeby, i Ja, i wszyscy czytający te komentarze czegoś się nauczyli nowego.

 

Z tego miejsc chciałabym wam podziękować za 

super sprawa - będę starał się często używać.

komentarz 20 kwietnia 2021 przez j23 Mędrzec (194,920 p.)

@VBService, VLA w C++ to niestandardowe rozszerzenie g++. W VC++, jeśli mnie pamięć nie myli, VLA są niedozwolone (co jest zgodne ze standardem).

komentarz 20 kwietnia 2021 przez tkz Nałogowiec (42,000 p.)

Nikt Cię nie "disuje". Twoje rozwiązanie nie jest zgodne ze standardem i tyle. 

mokrowski przedstawił efekt działania na stosie. Nie wspominał nic o jojczeniu kompilatora. Oboje za to wspomnieliśmy o VLA, które nie jest zgodne z standardem C++, co jest powtarzane na tym forum w każdym poście dotyczącego dynamicznego rozmiaru tablicy.

To, że działa(znaczy kompiluje) jest tylko dzięki programistom, którzy implementowali kompilator. Nie jest to równoważne z poprawnym użyciem.  

komentarz 20 kwietnia 2021 przez mokrowski Mędrzec (155,460 p.)

@VBService, nikt Cię nie "disuje". Temat VLA jest już naprawdę wałkowany długo. Jest po prostu kilka mechanizmów których się albo nie używa, albo tylko w określonych i specyficznych okolicznościach. Co do VLA, w zasadzie w C++ takich okoliczności ... nie ma :/ Nawet lambdą i std::function można sobie zrobić narzut w pewnych okolicznościach i warto o tym wiedzieć.

Co do przełączników kompilatora, @tkz podał wersję od której można zacząć. W praktyce jednak zapewne się ze mną zgodzi że element -pedantic, bywa ... nad wyraz uciążliwy. W zasadzie mam w każdym projekcie moment gdzie się go pozbywam na korzyść np. diagnostyki konwersji, niezainicjalizowanych zmiennych itp. . Tym bardziej jeśli zgłasza ostrzeżenie dla bibliotek lub kodu legacy.

Jak lubisz narzędzia online, to jest jeszcze przydatne: https://cppinsights.io/ . Tym razem w skrócie "rozbiera proces wnioskowania kompilatora na szablonach". Nie schodzi do poziomu asemblera, co robi domyślnie godbolt.

Podobne pytania

0 głosów
2 odpowiedzi 253 wizyt
0 głosów
0 odpowiedzi 159 wizyt
0 głosów
0 odpowiedzi 139 wizyt

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

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

...