c programming funktioner i array

Her kan du få hjælp og stille spørgsmål til andre programmeringssprog!
Besvar
Yuunus
Begynder
Indlæg: 7
Tilmeldt: 20. sep 2011, 12:39

c programming funktioner i array

Indlæg af Yuunus » 14. okt 2015, 21:50

Er der Nogen af der kan hjælpe mig med at forstå hvorfor han skrive " strlen(arrayAlias) - turn - 1 inde i for -loopen ?? hvad gøre variablen Turn ??

Kode: Vælg alt

‪#‎include‬ <stdio.h>
#include <string.h>
void sortCharArray(char[]);
int main()
{
char volapyk[] = "asdfhfk";
int index, turn, slut = 0;
printf("Tekststreng i oprindelig orden: %s\n", volapyk);
sortCharArray(volapyk);
printf("\nTekststreng i alfabetisk orden: %s\n", volapyk);
return 0;
}
void sortCharArray(char arrayAlias[])
{
int turn = 0, index, end = 0; int fiiri = 0; int fiiri2 = 0;
while (arrayAlias[turn] != '\0' && end == 0)
{
end = 1;
for (index = 0; index < strlen(arrayAlias) - turn - 1; index++)
{
if (arrayAlias[index] > arrayAlias[index + 1])
{
int hold = arrayAlias[index];
arrayAlias[index] = arrayAlias[index + 1];
arrayAlias[index + 1] = hold;
end = 0;
}
}
turn++;
}
}

jepperask
Geni
Geni
Indlæg: 377
Tilmeldt: 4. nov 2012, 17:57

Re: c programming funktioner i array

Indlæg af jepperask » 15. okt 2015, 00:34

Du får samme resultater hvis du fjerner den, men den bruges trods alt til en NULL-test ved (arrayAlias[turn] != '\0') - og så tror jeg hovedfunktionen er at du ikke skal tjekke resten af char-arrayet igennem, igen, hvis det allerede er sat i orden.

Er du med på hvordan de 2 loops fungerer?
Nedenstående billede giver måske mere mening: der er ingen grund til at vi når turn = 4 tjekker om c < d < e < f, for vi ved allerede at de står som de skal, så der er ingen grund til at vi sammenligner dem igen.

Billede

EDIT: For lige at gøre det lidt mere nørdet, har jeg sammenlignet kørselstiderne med og uden turn, og for et char-array med 1000 random bogstaver, giver det tider på 16,7 og 27,7 sek, alt efter om du benytter turn.. Så altså mærkbart hvis det er et større system. :-)

Yuunus
Begynder
Indlæg: 7
Tilmeldt: 20. sep 2011, 12:39

Re: c programming funktioner i array

Indlæg af Yuunus » 15. okt 2015, 14:43

jamen undskyld jeg spørger dumt men hvorfor trækker man 1 fra strlen(arrayAlias) ??
og hvornår kan turn være ligemed \'0'

når jeg prøver undskriver turn så bliver den jo kun 5?

jepperask
Geni
Geni
Indlæg: 377
Tilmeldt: 4. nov 2012, 17:57

Re: c programming funktioner i array

Indlæg af jepperask » 15. okt 2015, 15:03

Yuunus skrev:jamen undskyld jeg spørger dumt men hvorfor trækker man 1 fra strlen(arrayAlias) ??
Jeg tror vi trækker 1 fra, fordi den sidste sammenligning vi laver er mellem den næst-sidste og den sidste. Trækker vi ikke 1 fra, vil den måske forsøge at sammenligne den sidste værdi, med en værdi der ikke er i arrayet.
Yuunus skrev: og hvornår kan turn være ligemed \'0'
Det er ikke turn, men arrayAlias[turn], som altså er det nuværende char vi kigger på. Så vi tjekker om dét char er lig null ('\0' = null).
Yuunus skrev: når jeg prøver undskriver turn så bliver den jo kun 5?
Yes, men husk at tælle 0 med, så har du 6 turns (0,1,2,3,4,5).

Yuunus
Begynder
Indlæg: 7
Tilmeldt: 20. sep 2011, 12:39

Re: c programming funktioner i array

Indlæg af Yuunus » 15. okt 2015, 21:28

siger hermed 100000 tak for din hjælpe. jeg forstår det nu

Besvar