Bruno Mars Skrevet 17. september 2009 Del Skrevet 17. september 2009 Skriv et program som skriver ut følgende: * *** ***** ******* ***** *** * Du skal kun bruke tegnet ’*’ eller ’ ’ (blank) i printf-statementet ditt. Selvfølgelig også lov med tegn for linjeskift. Hvert printf-statement skal kun inneholde 1 ’*’ eller ’ ’. Bruk så få printf-statements som mulig. ____________ Dette er det enkleste jeg kom på: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; /*1*/ for (i=1; i<=3; i++) printf(" "); for (i=1; i<=1; i++) printf("*"); for (i=1; i<=3; i++) printf(" "); printf("\n"); /*2*/ for (i=1; i<=2; i++) printf(" "); for (i=1; i<=3; i++) printf("*"); for (i=1; i<=2; i++) printf(" "); printf("\n"); /*3*/ for (i=1; i<=1; i++) printf(" "); for (i=1; i<=5; i++) printf("*"); for (i=1; i<=1; i++) printf(" "); printf("\n"); /*4*/ for (i=1; i<=7; i++) printf("*"); printf("\n"); /*5*/ for (i=1; i<=1; i++) printf(" "); for (i=1; i<=5; i++) printf("*"); for (i=1; i<=1; i++) printf(" "); printf("\n"); /*6*/ for (i=1; i<=2; i++) printf(" "); for (i=1; i<=3; i++) printf("*"); for (i=1; i<=2; i++) printf(" "); printf("\n"); /*7*/ for (i=1; i<=3; i++) printf(" "); for (i=1; i<=1; i++) printf("*"); for (i=1; i<=3; i++) printf(" "); printf("\n"); system("PAUSE"); return 0; } Lenke til kommentar
GeirNord Skrevet 17. september 2009 Del Skrevet 17. september 2009 Hva med å lage en funksjon som tar to argumenter: Antall tegn å skrive ut, og hvilket tegn du skal skrive ut. Så kan du gjøre slik: MinPrint(3,' '); Minprint(1,'*'); MinPrint(1,'\n'); osv... Da har du kun en printf() i koden din Lenke til kommentar
Bruno Mars Skrevet 17. september 2009 Forfatter Del Skrevet 17. september 2009 Blir ikke det feil i fohold til "Du skal kun bruke tegnet ’*’ eller ’ ’ (blank) i printf-statementet ditt."? Eller er det jeg som leser feil? Lenke til kommentar
GeirNord Skrevet 17. september 2009 Del Skrevet 17. september 2009 Mjo, blir vel det. Bruk to funksjoner istedet, MinPrintStjerne(antall) og MinPrintBlank(antall). Dobbelt så mange printf(), men likevel bedre... Lenke til kommentar
Bruno Mars Skrevet 17. september 2009 Forfatter Del Skrevet 17. september 2009 Litt starthjelp? Kan ikke allverdens om funksjoner. Lenke til kommentar
tajto Skrevet 17. september 2009 Del Skrevet 17. september 2009 Se på det som et array på 8x8. #define star '*' #define empty ' ' main () { int i; for (i = x; i < x; i++) { if (something % x) { printf("\n"); } else if (something) { printf("%c", star); } else { printf("%c", empty); } } } Lenke til kommentar
GeirNord Skrevet 18. september 2009 Del Skrevet 18. september 2009 Fullfør denne: int MinPrintStjerne(int antall) { for (i=1;i=antall;i++) { printf('*'); } } int MinPrintBlank(int antall) { for (i=1;i=antall;i++) { printf(''); } } int main() { MinPrintBlank(3); MinStjerne(1); Printf('\n'); MinPrintBlank(2); MinStjerne(3); Printf('\n'); } Lenke til kommentar
JeffK Skrevet 18. september 2009 Del Skrevet 18. september 2009 (endret) #include <stdio.h> #include <stdlib.h> void foobar(int n) { for(int i = 0; i < (n+7)/2; i++) printf((i<(7-n)/2)?" ":"*"); printf("\n"); } void main() { for(int i = -3; i <= 3; i++) foobar(7-abs(2*i)); } Med en nøstet conditional kan man komme ned i én printf. Endret 18. september 2009 av JeffK Lenke til kommentar
GeirGrusom Skrevet 18. september 2009 Del Skrevet 18. september 2009 Dette er første oblig i DA1 på HVE ^^ Lenke til kommentar
norpheus Skrevet 18. september 2009 Del Skrevet 18. september 2009 Stemmer GeirGrusom, husker den oppgaven veldig godt Hvis det fortsatt er Helge Herheim som har DATFE40, har du ihvertfall fått en glimrende lærer. En av de beste jeg har hatt noen gang. Hvis det er data-linja du går kan du se fram til mange interessante fag og mange gode lærere (hvis du overlever realfagene). Lykke til! Lenke til kommentar
GeirGrusom Skrevet 18. september 2009 Del Skrevet 18. september 2009 Hehe takk takk! Jeg går 2. året nå, har Helge i algoritmer og datastrukturer (C++) Hadde han i Java og C også. Lenke til kommentar
Bruno Mars Skrevet 18. september 2009 Forfatter Del Skrevet 18. september 2009 Helge ruler gata, ja. Går selv første år, datateknikk. Lenke til kommentar
GeirGrusom Skrevet 18. september 2009 Del Skrevet 18. september 2009 (endret) Mulig jeg var fadderen din da hehe edit: Men ihvertfall, du må bare telle antall linjer, og tenke deg til hvordan det skal gjøres. Kraftig hint er for-løkker. Endret 18. september 2009 av GeirGrusom Lenke til kommentar
Bruno Mars Skrevet 18. september 2009 Forfatter Del Skrevet 18. september 2009 (endret) Denn var jo god, men det er noe som er feil. Den stopper ikke. Når jeg setter inn break; så kommer det bare: * * Continue; funker heller ikke. #include <stdio.h> #include <stdlib.h> int MinPrintStjerne(int antall) { int i; for (i=1;i=antall;i++) { printf("*"); } } int MinPrintBlank(int antall) { int i; for (i=1;i=antall;i++) { printf(" "); } } int main() { MinPrintBlank(3); MinPrintStjerne(1); printf("\n"); MinPrintBlank(2); MinPrintStjerne(3); printf("\n"); system("PAUSE"); return 0; } Og ja, jeg vet den ikke er helt ferdigskrevet i main(). Endret 18. september 2009 av mx1000 Lenke til kommentar
GeirNord Skrevet 18. september 2009 Del Skrevet 18. september 2009 Ser jeg har gort feil i for-løkkene; komparativ er feil. Rett i=antall til i==antall.... Har programmert for mye Delphi i det siste... Lenke til kommentar
Bruno Mars Skrevet 18. september 2009 Forfatter Del Skrevet 18. september 2009 <= er vel mer riktig. Den burde jeg ha sett. Takk. Lenke til kommentar
CoolBeer Skrevet 30. september 2009 Del Skrevet 30. september 2009 (endret) Lagde en C++ versjon(sikkert overkomplisert men) for morroskyld #include <iostream> #include <string> void printStars(const int noOfStars) { std::cout << std::string((7-noOfStars)/2, ' '); std::cout << std::string(noOfStars, '*') << "\n"; } int main(void) { int tyrant = 1; int incrementor = 2; while(true) { printStars(tyrant); if(tyrant == 7) incrementor = -2; tyrant += incrementor; if(tyrant < 0) break; } return 0; } Merk, er ingen form for errorsjekk i koden, så hvis printStars får et tall større enn 7 så ryker nok koden på en exception muligens. Endret 30. september 2009 av CoolBeer Lenke til kommentar
JeffK Skrevet 30. september 2009 Del Skrevet 30. september 2009 Lagde en C++ versjon(sikkert overkomplisert men) for morroskyld #include <iostream> #include <string> void printStars(const int noOfStars) { std::cout << std::string((7-noOfStars)/2, ' '); std::cout << std::string(noOfStars, '*') << "\n"; } int main(void) { int tyrant = 1; int incrementor = 2; while(true) { printStars(tyrant); if(tyrant == 7) incrementor = -2; tyrant += incrementor; if(tyrant < 0) break; } return 0; } Merk, er ingen form for errorsjekk i koden, så hvis printStars får et tall større enn 7 så ryker nok koden på en exception muligens. Oi, man kommer vel ikke lavere enn 0 printf'er! Lenke til kommentar
CoolBeer Skrevet 30. september 2009 Del Skrevet 30. september 2009 Oi, man kommer vel ikke lavere enn 0 printf'er! Hehe, nå er vel std::cout ikke tilgjengelig i C, så der hadde nok printf hatt sin misjon. Det var som sagt en C++ versjon for morroskyld Lenke til kommentar
TheMaister Skrevet 5. oktober 2009 Del Skrevet 5. oktober 2009 (endret) Har DA1 på HVE selv Går mikro though. Løste den sånn: #include <stdio.h> #include <stdlib.h> void printSpace ( int ); /* Printer mellomrom basert på inputverdi */ void printStar ( int ); /* Printer stjerner basert på inputverdi */ int main(int argc, char** argv) { const int width = 7; /* Kan endres for større/mindre diamanter */ int counter; for ( counter = 1; counter <= width; counter++ ) { /* Her trenger man å lage et mønster ved hjelp av linje-nummer * "counter", og bredden til diamanten "width". Mønsteret man * ønsker er 3-1-3, 2-3-2, 1-5-1, 0-7-0, 1-5-1, 2-3-2, 3-1-3. * * Mønsteret 3, 2, 1, 0, 1, 2, 3 er veldig lett å finne. * x(n) = abs ( (width+1)/2 - n ). * * Mønsteret nedenfor kan finnes ved å sette opp en likning: * width = 2 * abs( (width+1)/2 - n ) + x(n) * x(n) = width - 2 * abs( (width+1)/2 - n */ printSpace ( abs ((width+1)/2 - counter) ); printStar ( width - 2*abs( (width+1)/2 - counter ) ); /* printSpace ( abs ((width+1)/2 - counter) ); Hadde den med i innleveringa :p hehe. Litt ubrukelig når jeg tenker meg om >_> */ printf( "\n" ); } return 0; /* Bruker linux så trenger ikke å måtte stoppe opp terminalen med getchar() eller DOS-kommandoen system("PAUSE") for å se noe, siden jeg sitter i terminalen fra før :p */ } void printSpace ( int n ) { int counter; for ( counter = 0; counter < n; counter++ ) printf ( " " ); } void printStar ( int n ) { int counter; for ( counter = 0; counter < n; counter++ ) printf ( "*" ); } Hvis man skal forholde seg til oppgaven og ikke "jukse" seg unna problemet med å bruke putc('*') eller noe i den duren, så må man nok bruke minst 2 printf (tror ikke det stod noe om hvordan new-linen skulle utføres. Endret 5. oktober 2009 av TheMaister Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå