Bruno Mars Skrevet 17. september 2009 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; }
GeirNord Skrevet 17. september 2009 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
Bruno Mars Skrevet 17. september 2009 Forfatter 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?
GeirNord Skrevet 17. september 2009 Skrevet 17. september 2009 Mjo, blir vel det. Bruk to funksjoner istedet, MinPrintStjerne(antall) og MinPrintBlank(antall). Dobbelt så mange printf(), men likevel bedre...
Bruno Mars Skrevet 17. september 2009 Forfatter Skrevet 17. september 2009 Litt starthjelp? Kan ikke allverdens om funksjoner.
tajto Skrevet 17. september 2009 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); } } }
GeirNord Skrevet 18. september 2009 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'); }
JeffK Skrevet 18. september 2009 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
GeirGrusom Skrevet 18. september 2009 Skrevet 18. september 2009 Dette er første oblig i DA1 på HVE ^^
norpheus Skrevet 18. september 2009 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!
GeirGrusom Skrevet 18. september 2009 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å.
Bruno Mars Skrevet 18. september 2009 Forfatter Skrevet 18. september 2009 Helge ruler gata, ja. Går selv første år, datateknikk.
GeirGrusom Skrevet 18. september 2009 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
Bruno Mars Skrevet 18. september 2009 Forfatter 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
GeirNord Skrevet 18. september 2009 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...
Bruno Mars Skrevet 18. september 2009 Forfatter Skrevet 18. september 2009 <= er vel mer riktig. Den burde jeg ha sett. Takk.
CoolBeer Skrevet 30. september 2009 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
JeffK Skrevet 30. september 2009 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!
CoolBeer Skrevet 30. september 2009 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
TheMaister Skrevet 5. oktober 2009 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
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å