Właściwy sposób losowania liczb z podanego zakresu wygląda następująco:
double result = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT
Część w pierwszym nawiasie zwróci nam liczby z zakresu [0.0; 1.0] (włącznie z początkiem i końcem przedziału). Następnie mnożymy ten przedział przez rządaną szerokość przedziału (dla przedziału [0.0; 30.0] WIDTH = 30) oraz dodajemy przesunięcie przedziału (dla przedziału [-10.0; 20.0] WIDTH = 30, SHIFT = -10).
Jako zadanie dla autora wątku pozostawiam pobawienie się powyższym wzorem, aby przedziały były domknięte lub nie.
kod
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH -100
#define SHIFT 100
typedef FILE* stworz; //wskaznik do pamieci zapisywanego pliku
int main(int argc,char * argv[]){
srand(time(NULL));
double x, y, z;
x = 0.0;
y = 0.0;
z = 0.0;
stworz text=fopen(argv[1], "w"); //stworzenie pliku
int n=atoi(argv[2]); // ilosx pozycji
if(argc != 3 || n< 0 || (text)==NULL ) { // mozliwe beldy
printf("blad");
exit(1);
}
fprintf(text,"%d\n", n);
for(int i = 0 ; i<=n;i++){ //zapelnianie pliku
x = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT ;
y = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT ;
z = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT ;
fprintf(text, "%3.lf, %3.lf, %3.lf \n", x, y, z);
}
fclose (text);
return 0;
}
wynik
5
-0, -0, -0
0, -86376989666919185776545571521880307165302761301153183899867685542458184781886344062043583825396910423455063965833072351257579360352149151530010031887874872801077083698305499938282340495829627117302714477420499702967403277988762795469130206862882544508780993316702319900623960080214649860835842436867951591770278186494864384099876098763537098515084540477645284938721409804332732412290728371808366227544533340490833185924302078774663391300383423012927271599350543431718521032566311610337923462394141817269470749883245659689866514217708817218676869474229601714941923203447914278089869517236115881731911286534062992394798033431050476672286506148534297346027476221244094726048563326706144072892622434734455764018366526121699164248139452875527599781947889841404458000071701889212126328734167296658180039887062356052184777696460611455777772808177706031321547000662687560694251926251150140421297747888167619195224726840476313672645540511106663762680549280895090896527322106037463663978618400357784871304826457669557445953169053132167210619957980299446242380491285381954178396691461728585706931809839447290018291089049414881376160901779047492743586576909638674432368705854341140283574464530799762639732427784275207792680377091045111436774775116841767108641979572862136860199804592005887021984025033737585573240368356989050955866964541072110724867458605979402012148005143514850400031587777623594798116685087226013581872914508286452279464096567475973230574919662894324079690630657696910124150435858959148495264547155182253697728709560206872209583182312978517633730363347965610710038687670115918424261171294121534649272551977513849996652246088426453887771540639335002214673344760867859697761071919982386168820011010006517090673555163293799168959263902310171798302530327314445021167194692511222088042310754831324211406093155919777172800570639396022237910114427517640191518071552496576452101683427144783947820310913508567462337436731623386499091723866961502114547893654963984244863582101967546991852889328589337595326136059352332207852105294673668019617261864150763152450598973650605873299951798640927184523745827842222060235477353504389318524003603945441022277472122669068562734642165696901466931358433371241052809812800029237937049019027478919836310434384991867909024627859902469406427280596095484962514304930401255897043769699023334193662566219026398097861115695150863029453516017817534492732584178028572509143634457633173144825571969353711340318294893641514267936265846912275469389778988118998096114860446720699158260195735245189902877677563544148651337143494407160779689439548887992821714777740381151631291742222172656372003752430901174246852348839956903464335026638337948198443265269981229906566807798868373719702136099086555064877000135643872400013921487572890453276434253640493553452940613315862597311136595622340764883456084370210015784750512348147159210503185377156089028409572858047000177771557827979358635317351684137221691266843830523244756773379127483263250231064474485667246833322605793460329441302599444250663395481128287337945876557157031670826365013192365697580115167617141519872551866617654886313063679385752715948556177503430672265059748681903975533233995197516929924137597668680843356290925582404339052849351401519437935678000205507096980133374883211853357575915006907218213837342578168310563934183448519302247044771893171818600963288863531245664646975049738706061199769504272150680603951127562151409809295306526483581466302299290054059438552603556988548764813836833335984079173408937303210132284764240736256006032664097504662578378895353640967916152289992616981896326813641236346641279630028781548762988139498517488616768664037541870870480564940795649215190590230758864703192498301257963590160433334108263929545796127885627278804479403227337938378635811631713409298373230174858466346442205556736989569931639838867247250211010251290449246655668511207024577819026851818702158473079791090155909776174566604482708481335845583281460680000040131175797794119005425662298959483209673091077221802218162148939523067936085410846240345880642960400161034661928417265921725764152205813449165311233554987309998779076250192211101830091161474670976534150521183968214084572440554069579241278946217517573648892509763541762912167636686038191399505825527644528873238318707585422071604320033132369088473761588301739216418145524516672155843000210029939135100158432449040684455716040390206383436210795621734750943957994758314444117886862917586009387389285607523594845706694743027811649264362142475486983265531862057805995500887867392, -0
0, 0, -0
-0, -87719311684146918431585101075450816540491219490647439510552871588723875529287143617089546360916859758351805538273293413664114306097360206573167574561765318935047270277628785449616652123824726203243784732146355418813899375536127134359403733755661866469830528409586885339546621504790979200476052878922159990587073876724635179273591281813548164269890107101855733705710014689025597913159035166122326383338199506545260610228910873883062357079261369153581698849231937560969854583742673263043967506646812401331142700319210503606146240775525314580847116905341567157280329475581844073756022042570639537403418731088039728244141090547390866604381325179884939932373378875570692799396974881624719718485298220188221688302941398380404138780540788897185835526586049343610892332535482218633125730972887324666811346767862204448523606976026157139815139543653106655962492890381564916391667311820572332622793686067526218541480004935239903454257218077858026056446039034877725782223545319544366649864532785792553944147012436166612107710724637673333984815995415282686048029442166210281384627036447017420468509867787798756077113804719941919190423749580303561282427606681469050970318420107666602121409273087400513782363284925774030742216193059440625125330155108040704, -0
-0, -0, -0
-0, 0, -0