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

2. Wylosuj liczbę k z przedziału [1,10]. Utwórz jednowymiarową tablicę dynamiczną zawierającą k elementów typu float.

Cloud VPS
0 głosów
1,652 wizyt
pytanie zadane 2 grudnia 2015 w C i C++ przez martix3 Użytkownik (690 p.)
edycja 2 grudnia 2015 przez Eryk Andrzejewski

2. Wylosuj liczbę k z przedziału [1,10]. Utwórz jednowymiarową tablicę dynamiczną zawierającą k elementów typu float.

#include<iostream>
#include<stdlib.h>

int main()
{

int i, k;
float *p;

k=(rand()%10)+1;
p = new folat [k]; //alokacja pamieci

for(i=0; i<k ;i++)
{
    std::cin>>p[i];
}

delete[] p; // zwolnienie pamieci
p = NULL; ; return 0;

}

Podpowie mi ktoś czy dobrze wykonałam to zadanie?

4 odpowiedzi

0 głosów
odpowiedź 2 grudnia 2015 przez endo93 Użytkownik (720 p.)
edycja 2 grudnia 2015 przez endo93

Co mamy zrobić z tym kodem? Powinnaś podać jakąś informacje, co nie trybi, albo co chciałabyś się dowiedzieć. Potrafimy pisać w C++, ale nie potrafimy jeszcze czytać w myślach cheeky.

komentarz 2 grudnia 2015 przez martix3 Użytkownik (690 p.)
Może jeszce nie wyświetliło, bo wkleiłam kod i zapomniałam dodać pytania, ale od razu edytowałam;) Po prostu chciałam się spytać czy dobrze zadanie wykonałam.
komentarz 2 grudnia 2015 przez endo93 Użytkownik (720 p.)
edycja 2 grudnia 2015 przez endo93

No dobrze. Masz literówkę w linii z alokacją pamięci. Poza tym wygląda OK. Powinnaś tylko trochę popracować nad estetyką smiley.

komentarz 2 grudnia 2015 przez niezalogowany
@endo93 - nie "powinieneś", tylko powinnaś ;) To samo z "chciałbyś" :)
komentarz 2 grudnia 2015 przez endo93 Użytkownik (720 p.)

Auć! Przepraszam bardzo blush. Pod Linuxem śmiga ten kod, ale warto w razie czego doincludować "time.h" i użyć przed losowaniem "srand(time(NULL));". Bez tego nie będzie losował, tylko będzie podawał cały czas tę samą liczbę. Pozdrawiam.

komentarz 2 grudnia 2015 przez niezalogowany
@endo93 - nie srand(rand()), tylko srand(time(NULL)) :D No chyba, że takie rozwiązanie jest na Linuxie (ale chyba nie jest ;)).
komentarz 2 grudnia 2015 przez endo93 Użytkownik (720 p.)

Co ja napisałem!! Racja, poprawiłem już surprise.

0 głosów
odpowiedź 2 grudnia 2015 przez Porcupine Nałogowiec (31,560 p.)

Jak wstawiasz kod korzystaj ze znaczników [code] ... ;)

@EDIT

Z takich uwag: 

1) Nie "folat", a float... Nawet nie wkleiłaś tego do jakiegoś IDE coby składnie podświetlał... 

2) Zmienną i możesz zadeklarować bezpośrednio w pętli for :
 

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

3) Popraw entery, tabulacje, spacje itd. bo trochę razi po oczach :(

Pozdrawiam,

0 głosów
odpowiedź 2 grudnia 2015 przez niezalogowany
No, brakuje paru rzeczy, takich jak srand(time(NULL)) wywołane na początku (potrzebne do rand(), żeby na początku pobrać czas, do tego trzeba zainkludować bibliotekę time.h) i jeszcze dwa średniki po p=NULL (swoją drogą, to ta linijka nie jest raczej potrzebna, wskaźnik wtedy się ustawia na NULL, czyli na nic, czyli że nie wiem po co to jest :)), int i możesz zadeklarować w pętli for, czyli tak for(int i=0;...). A tak poza tym to program spełnia swoją funkcję i powinien działać :)

Edit: słuszna uwaga endo93, literówka w alokacji dynamicznej, nie folat, tylko float ;) I tak jak powiedział, powinnaś pisać troszkę staranniej, albo po skończeniu przejrzeć kod jeszcze raz, żeby upewnić się, że nie ma żadnych błędów "ortograficznych" ;)
0 głosów
odpowiedź 2 grudnia 2015 przez Radfler VIP (101,030 p.)

Prawie dobrze:

1. Użyj std::srand(std::time(nullptr)) na początku programu (inicjalizuje ziarno generatora), oraz dołącz <ctime>,

2. new float[k] nie new folat[k],

I parę uwag:

1. W C++ jest nagłówek <cstdlib>  nie <stdlib.h>,

2. Jak już to std::rand nie rand,

3. Możesz wykorzystać ficzer z C++11: zamiast NULL możesz użyć lepszego nullptr,

4. Linijka return 0; nie jest potrzebna (tym razem proszę bez dyskusji na ten temat).

komentarz 2 grudnia 2015 przez niezalogowany
No, super, wszystkie nasze uwagi ładnie zebrane w całość + to, czego nie zauważyliśmy (czyli punkt 1. i 2. zawarty w "I parę uwag") :)

Do punktu czwartego... Nie mam żadnych uwag :D
komentarz 2 grudnia 2015 przez martix3 Użytkownik (690 p.)
#include<iostream>
#include<stdlib.h>
#include<time.h>
int main()
{
int k;
float *p;
srand(time(NULL));
k=(rand()%10)+1;
std::cout<<"Liczba elementow tablicy: "<<k<<"\n";
p = new float [k]; //alokacja pamieci
for(int i=0; i<k;i++)
{std::cout<<"Podaj liczbe\n";
    std::cin>>p[i];
}
delete[] p; // zwolnienie pamieci
return 0;
}

Trochę ozmieniałam i chyba powinno być dobrze;))

komentarz 2 grudnia 2015 przez Radfler VIP (101,030 p.)
Program dał się skompilować. Jest dobrze!
komentarz 2 grudnia 2015 przez niezalogowany
No, ale jeszcze nie jest ;) Nie stdlib.h, tylko cstdlib. I poza trochę nieczytelnym kodem (rób troszkę więcej pustych linii, żeby to wszystko nie było ze sobą takie posklejane) to tyle :)
komentarz 2 grudnia 2015 przez martix3 Użytkownik (690 p.)
A konieczna jest zmiana biblioteki?  Piszę w CodeBlocks i program ładnie mi działa...
komentarz 2 grudnia 2015 przez niezalogowany
O, a to ciekawe. No, ale skoro działa, to wszystko dobrze :)
komentarz 2 grudnia 2015 przez Radfler VIP (101,030 p.)

Tak, standardowe biblioteki z języka C działają na prawie każdym kompilatorze. Jednak lepiej używać tych C++owych, gdyż te z C mają status przestarzałych. Także zamiast:

#include <stdio.h>
#include <stddef.h>
#include <stdalign.h>

lepiej używać:

#include <cstdio>
#include <cstddef>
#include <cstdalign>
komentarz 2 grudnia 2015 przez Avernis Nałogowiec (27,400 p.)
Przecież i tu, i tu jest to samo :/
komentarz 2 grudnia 2015 przez Radfler VIP (101,030 p.)
Poprawiłem, błąd copypasty.
komentarz 2 grudnia 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)

@Radfler

Z tą przestrzenią nazw - tak to jest, jak w większości kursów/poradników uczą pisania using namespace std. Potem ludzie nie wiedzą, czy dana funkcja/obiekt/klasa należy do std, czy nie...

komentarz 3 grudnia 2015 przez Avernis Nałogowiec (27,400 p.)

Więc jak dadzą using namespace std, to nie muszę się tym martwićyes

komentarz 3 grudnia 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ale potem nie wiesz co do czego należy
komentarz 3 grudnia 2015 przez Radfler VIP (101,030 p.)

Stosowanie using namespace to fatalna praktyka z powodu ryzyka wieloznaczności z innymi bibliotekami. Jak już używasz tej instrukcji, to używaj jej lokalnie a nie globalnie.

komentarz 3 grudnia 2015 przez Avernis Nałogowiec (27,400 p.)
to proste, co do czego należy, wystarczy że wpiszesz std:: i ci wszystko wyskoczy
komentarz 3 grudnia 2015 przez niezalogowany
Jeny, to wcale nie jest zła praktyka, na co komu wiedzieć gdzie jest jaka funkcja, skoro używa maximum dwóch przestrzeni nazw. Ja tego będę używał i trudno. W małych programach też używam zmiennych globalnych i jeszcze smutni panowie w czarnych garniturach do mnie nie przyszli. Myślę, że każdy już wie o co chodzi z using namespace i każdy się wypowiedział, więch chyba możemy zakończyć temat ;)
komentarz 3 grudnia 2015 przez Radfler VIP (101,030 p.)
To spróbuj napisać program w notatniku, albo na kartce (jak na teście). Na pewno coś Ci wyskoczy... Poza tym jeżeli korzysasz z C::B to mnóstwo komponentów nie jest wyświetlanych.
komentarz 3 grudnia 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
IMO jest to zła praktyka, bo ktoś może nazwać sobie swoja funkcję tak jak ta w przestrzeni nazw std i co wtedy?
komentarz 3 grudnia 2015 przez niezalogowany
No, chyba wszystkie funkcje jakie używam są  z std (bo oprócz sf, to żadnych innych przestrzeni nie używam), więc wystarczy, że bym dodał przedrostek std:: do każdej bibliotecznej funkcji. Chociaż nie, bo na przykład cout i cin nie są funkcjami... Hm, no chyba rzeczywiście trzeba to wszystko spamiętać...
komentarz 3 grudnia 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ale chociażby chciałbyś sobie zaincludować jakąś amatorsko napisaną biblioteczkę, napisaną w C. Jako, że nie było tam klasy string, ktoś postanowił sobie taką samemu napisać. Teraz dołączasz ją do swojego projektu, piszesz using namespace std i co teraz? Mamy dwie różne klasy o nazwie string :)
komentarz 3 grudnia 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
A poza tym, jak sądzisz - po co wprowadzono przestrzenie nazw? Żeby programista musiał więcej pisać, czy po coś jeszcze? :D
komentarz 3 grudnia 2015 przez niezalogowany
No wiem, ale dopóki nie kombinuję z bibliotekami i przestrzeniami, to nic się nie stanie :) Dobra, morał: nie warto używać using namespace przez to, że czasem niewiadomo co jest gdzie, ale jeśli ktoś nie używa więcej przestrzeni, to czemu nie. Chyba koniec tematu :)
komentarz 3 grudnia 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ja już się tam od using odzwyczaiłem :D

Podobne pytania

0 głosów
1 odpowiedź 786 wizyt
pytanie zadane 29 lutego 2016 w C i C++ przez Pixel040 Gaduła (3,100 p.)
+1 głos
1 odpowiedź 244 wizyt

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,903 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

Kursy INF.02 i INF.03
...