[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] malloc ter sig underligt



Peter Makholm wrote:

Anders Søndergaard <sslug@sslug> writes:



Hov før søren, jeg har glemt at poste funktionen! Det må i undskylde.



Har du overvejet at koden egentlig ikke er ret læsevenlig? (Meget af det følgende er selvfølgelig i høj grad bare min mening)

 - Når du bliver nødt til at forklare hvad dine etbogstavsvariable står
   for, så overvej om navnene er velvalgte.

- Indrykning

- Engelsk funktionsnavn, men danske variabelnavne

- Din løkke-variabel kalder du f, jeg ville kalde den i og så kalde
den variabel du kalder i noget andet.


- en for-løkke er mere konventionel i C

med realloc-rettelse kunne det se således ud:


/* * Find naturlige tal der går op i et givet tal. * Inddata: * int *p[] - pointer til et array af heltal. * int tal - tallet der skal findes divisore til * Uddata: * int count - antallet af tal i arrayet efter funktionen */

int find_numbers(int *p[], int number) {
   int count = 0;

int s = number;
for(int i = 1; i <= tal; i++) {
if (s*i == number) {
// printf("%i\n",f); /* debug-information */
*p = (int *) realloc(p, (count + 1) * sizeof(int));
*p[count] = f;
}


       s = number / (i+1); // Ehhh???
   }

   return count;
}



Jeg har lavet to eksempler på en lidt mere rationel funktion. Jeg er vant til C++, så jeg kender ikke realloc-syntaksen - den er råkopieret. Derudover bruger jeg kvadratrod, som skal inkluderes et eller andet sted fra. Måske fra <math.h>?
Funktion stopper ikke 1 og tallet selv i array'et.


Den første funktion finder alle primfaktorer:

int find_numbers ( int *p[] , int number ) {
int count = 0;
int limit = sqrt( number ); /* der er ingen grund til at gå højere op en kvadratroden af tallet. Men om en kvadratrodsoperation "koster for meget" skal være usagt.... */
int i = 2; while ( i <= limit ) {
if ( number % i ) { /* går ikke op */
++i;
} else { /* går op */
number /= i;
limit = sqrt( number ); *p = (int *) realloc(p, (count) * sizeof(int));
*p[count] = i;
++count;
i = 2;
}
}
return count;
}


Den næste funktion finder bare generelt alle tallene:
int find_numbers ( int *p[] , int number ) {
int count = 0;
int limit = sqrt( number ); /* der er ingen grund til at gå højere op en kvadratroden af tallet. Men om en kvadratrodsoperation "koster for meget" skal være usagt.... */
int i = 2; while ( i <= limit ) {
if ( number % i ) { /* går ikke op */
++i;
} else { /* går op */
limit = sqrt( number ); *p = (int *) realloc(p, (count) * sizeof(int));
*p[count] = i;
++count;
}
}
return count;
}


Hvis det ikke er så store tal, er den sidste nok den bedste/nemmeste, hvorimod hvis det er store tal, er den første nok at foretrække, da antallet af tal, der skal loopes igennem falder en del. Til gengæld skal du selv gange alle tallene i arrayet sammen, hvis du vil finde samtlige tal, der går op i et tal. Hvis programmet er beregnet til brøkforkortning, burde det dog være nok med primfaktorerne.


/Lars


--
------------------------------------------------------------------------

Lars Riisgaard Ribe

MSc, PhD-stud.

Telephone



+45 89 49 52 68

Fax 	+45 89 49 60 04
Email 	sslug@sslug <mailto:sslug@sslug>
Address 	MR-Center - Aarhus University Hospital
Skejby Sygehus
Brendstrupgaardsvej
Dk-8200 Aarhus N
Denmark

------------------------------------------------------------------------

 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:44 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *