Jak napisać program który wypełni tablice jednowymiarową liczbami losowymi z zakresu 0-10 używając wskaźników?
#1
Napisano 21.02.2016 - 15:38
Napisano 25.09.2011 - 17:55
#2
Napisano 21.02.2016 - 22:26
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int k,n
int* t;
printf("n=");
scanf("%d",&n); //w C++ masz strumień wejścia
t=(int*)malloc(n*sizeof(int)); // w C++ masz new
srand(time(NULL));
for(k=0;k<n;k++)
t[k]=rand()%11;
//wypisanie tablicy
for(k=0;k<n;k++)
printf("%d\n ",t[k]); //w C++ masz strumień wyjścia
free(t); // w C++ masz delete[]
return 0;
}
Napisany w stylu C ale ci skompiluje bo C++ jest nadzbiorem C
#3
Napisano 21.02.2016 - 23:13
dzięki, a mógłbyś powiedzieć co jest nie tak z tym programem ?
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
int tab[100];
int *w;
*w=rand()%5+3;
for(int i=1; i<=100; i++)
{
tab[i]=*w;
}
cout<<"tab = ";
for(int i=1; i<=100; i++)
{
cout<<tab[i]<<" ";
}
return 0;
}
#4
Napisano 22.02.2016 - 21:07
Masz w ostatnim obrocie pętli , a tablica tab ma indeksy , więc wychodzisz poza zakres
#5
Napisano 25.02.2016 - 15:58
Ok.dzięki
A gdybym chciał co drugą liczbę teraz chciał zamienić na inną ?
#6
Napisano 25.02.2016 - 17:34
To w pętli for zrób i+=2 zamiast i++ i będziesz odwiedzał co drugi element tablicy.
#7
Napisano 25.02.2016 - 17:44
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
int main()
{
srand(time(NULL));
int tab[10];
int *w;
w=&tab[0];
for(int i=0; i<10; i++)
{
*w=rand()%6+1;
cout<<" "<<*w;
w++;
}
cout<<endl;
for(int i=0; i<10; i+=2)
{
*w=7;
w+=2;
cout<<" "<<*w;
}
return 0;
}
zrobiłem coś takiego ale nie działa
#8
Napisano 25.02.2016 - 18:49
Po wykonaniu pierwszej pętli w wskazuje na komórkę pamięci "za" tablicą tab. W drugiej pętli próbujesz coś zapisać w to miejsce i stąd błąd naruszenia ochrony pamięci.
#9
Napisano 25.02.2016 - 19:04
Co oznacza że "za" tablicą tab ?
#10
Napisano 25.02.2016 - 23:13
Tablica tab w pamięci to po prostu zaalokowane miejsce na 10 intów (z reguły to jest ciągły obszar pamięci, ale nie ma gwarancji, pewnie to zależy od kompilatora). Wykonanie w++ powoduje, że w pokazuje na kolejny element tablicy, a wykonanie tej instrukcji w momencie, gdy w pokazuje już na ostatni element, powoduje "wyjście" w poza zaalokowany obszar pamięci.
#11
Napisano 25.02.2016 - 23:36
Okej
więc co tam tam można poprawić?
#12
Napisano 26.02.2016 - 00:06
Np tak można to zrobić
#include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); int tab[10]; int *w; for(w = &tab[0]; w <= &tab[9]; ++w) { *w = rand() % 6 + 1; std::cout << " " << *w; } std::cout << std::endl; for(w = &tab[0]; w <= &tab[9]; w += 2) *w = 7; for(w = &tab[0]; w <= &tab[9]; ++w) std::cout << " " << *w; return 0; }
Użytkownik Ereinion edytował ten post 26.02.2016 - 00:07
#13
Napisano 26.02.2016 - 01:18
Dzięki , widzę że w pętli for zamiast i użyłeś w
#14
Napisano 26.02.2016 - 09:25
Tak jest, ale jak wolisz z i to można np tak:
#include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); int tab[10]; for(int i = 0; i < 10; ++i) { *(tab + i) = rand() % 6 + 1; std::cout << " " << *(tab + i); } std::cout << std::endl; for(int i = 0; i < 10; i += 2) *(tab + i) = 7; for(int i = 0; i < 10; ++i) std::cout << " " << *(tab + i); return 0; }
#15
Napisano 26.02.2016 - 14:39
To pierwsze rozwiązanie jest chyba lepsze ,dzięki
w trzecim rozwiązaniu użyłeś trzech pętli gdy ja używałem tylko 2
#16
Napisano 26.02.2016 - 15:16
No tak, tylko Twoje rozwiązanie z dwiema pętlami nie działało dobrze, bo wypisywało tylko co drugi element listy
Oczywiście można to wszystko zrobić i w jednej pętli, np tak:
#include <iostream> #include <cstdlib> #include <ctime> #include <sstream> int main() { srand(time(NULL)); int tab[10]; std::stringstream mod_table; for(int i = 0; i < 10; ++i) { *(tab + i) = rand() % 6 + 1; std::cout << " " << *(tab + i); if (i % 2 == 0) *(tab + i) = 7; mod_table << " " << *(tab + i); } std::cout << std::endl; std::cout << mod_table.str() << std::endl; return 0; }
#17
Napisano 26.02.2016 - 15:55
Tego mod table to nie znam
#18
Napisano 26.02.2016 - 16:06
Tak nazwałem sobie zmienną od "modified table". Chodzi o to, żeby tej zmienionej tablicy nie wypisywać od razu na standardowe wyjście, tylko przechować gdzieś, a wypisać na końcu.
#19
Napisano 26.02.2016 - 17:48
Ok,dzięki za wszystko
#20
Napisano 31.08.2016 - 13:13
Jeszcze zrobiłem to w ten sposób :
# include <iostream>
# include <cstdlib>
# include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
int tab[10];
int *w;
w=&tab[0];
for(int i=0; i<=9; i++)
{
w=&tab[i];
*w=rand()%11;
w++;
}
for(int i=0; i<=9; i++)
{
cout<<tab[i]<<" ";
}
return 0;
}
Tematy podobne do: Wskaźniki w C++ x
Statystyka matematyczna
Wskaźniki struktury - Analiza Finansowa. Pomocy :(Napisany przez PiotrParyski, 16 Sep 2011 STUDIA |
|
|||
Ekonomia
Oblicz wskażnikiNapisany przez Wai2011, 01 Dec 2011 STUDIA |
|
|||
Statystyka matematyczna
Statystyka - wskaźnikiNapisany przez Sawyer1, 21 Jan 2013 STUDIA |
|
|||
STUDIA
Algebra liniowa
Wskaźniki w przestrzeni liniowejNapisany przez Trex, 04 Dec 2018 Algebra liniowa |
|