C/Visual C - Dibujar un espiral

   
Vista:

Dibujar un espiral

Publicado por Celeste (3 intervenciones) el 07/12/2016 02:55:30
Hola necesito ayuda con un programa (soy algo lenta para esto :-( )

necesito un programa que me permita dibujar un patrón de espiral de 80*45 caracteres.


salvar el trimestre depende de esto. AYUDA POR FAVOR
Untitled
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dibujar un espiral

Publicado por agustin (263 intervenciones) el 07/12/2016 13:24:33
En mi PC no me deja poner mas de 44 porque a partir del 45 hace cosas raras al pintar. Aqui te pongo lo que hice:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
 
//funcion para la linear horizontal incremental
int paintToRight(int top,int left,int right){
    int a,contador=0;
    for (a=left;a<=right; ++a) {
        gotoxy (a,top);
        printf("Û");
        contador++;
        Sleep (10);
    }
    return contador;
}
 
//funcion para la linea vertical incremental
int paintToDown(int right, int top, int down) {
    int a,contador=0;
    for (a=top; a<=down; ++a){
        gotoxy(right,a);
        printf("Û");
        contador++;
        Sleep (10);
    }
    return contador;
}
 
//funcion para la linea horizontal decremental
int paintToLeft(int bottom,int right,int left){
    int a,contador=0;
    for (a=right;a>=left; --a) {
        gotoxy (a,bottom);
        printf("Û");
        contador++;
        Sleep (10);
    }
    return contador;
}
 
//funcion lara la linea vertical decremental
int paintToUp(int left, int bottom, int top) {
    int a,contador=0;
    for (a=bottom; a>=top; --a){
        gotoxy(left,a);
        printf("Û");
        contador++;
        Sleep (10);
    }
    return contador;
}
 
int main() {
    int left,right,bottom,top;
    int x,y;
 
    do{
        printf("Introduce el numero de filas (entre 6 y 44): ");
        scanf("%d",&y);
        if(y < 6 || y > 44)
            printf("Numero de filas no valido. Vuelve a intentarlo.\n\n");
    }while(y < 6 || y > 44);
    do{
        printf("Introduce el numero de columnas: (entre 6 y 80): ");
        scanf("%d",&x);
        if(x < 6 || x > 80)
            printf("Numero de columnas no valido. Vuelve a intentarlo.\n\n");
    }while(x < 6 || x > 80);
 
    clrscr();
    for(left=1,bottom=y,right=x,top=1;left<=right && top<=bottom;left+=2,right-=2,top+=2,bottom-=2){
        if(paintToRight(top,left-1,right) < 2)
            break;
        if(paintToDown(right,top+1,bottom) < 2)
            break;
        if(paintToLeft(bottom,right-1,left) < 2)
            break;
        if(paintToUp(left,bottom-1,top+2) < 2)
            break;
    }
    getch();
    return 0;
}

Si quieres quitar la animacion comenta los Sleeps.
Si pones el limite en 45 te lo dibujara bien pero no se porque la ultima linea la empieza a dibujar de izquierda a derecha aunque se muestra al final todo correcto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dibujar un espiral

Publicado por agustin (263 intervenciones) el 07/12/2016 14:38:50
Por otro lado creo que lo que te piden no es exactamente lo que te puse, mas bien se podria decir que es esto lo que te piden:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
 
#define FILAS 45
#define COLUMNAS 81
 
//funcion para la linear horizontal incremental
void fillToRight(char matriz[FILAS][COLUMNAS],int top,int left,int right){
    int a;
    for (a=left;a<=right;++a) {
        matriz[top][a]='Û';
    }
}
 
//funcion para la linea vertical incremental
void fillToDown(char matriz[FILAS][COLUMNAS],int right, int top, int down) {
    int a;
    for (a=top; a<=down; ++a){
        matriz[a][right]='Û';
    }
}
 
//funcion para la linea horizontal decremental
void fillToLeft(char matriz[FILAS][COLUMNAS],int bottom,int right,int left){
    int a;
    for (a=right;a>=left; --a) {
        matriz[bottom][a]='Û';
    }
}
 
//funcion lara la linea vertical decremental
void fillToUp(char matriz[FILAS][COLUMNAS],int left, int bottom, int top) {
    int a;
    for (a=bottom; a>=top; --a){
        matriz[a][left]='Û';
    }
}
 
int main() {
    int left,right,bottom,top;
    int x,y;
    char matriz[FILAS][COLUMNAS];
 
    //Lleno la matriz con espacios y coloco al final de cada fila el caracter de fin de cadena
    for(x=0;x<FILAS;x++)
        for(y=0;y<COLUMNAS;y++)
            if(y<COLUMNAS-1)
                matriz[x][y]=' ';
            else
                matriz[x][y]='\0';
 
    //Creo la espiral en la matriz
    for(left=0,bottom=FILAS-1,right=COLUMNAS-2,top=0; top<=bottom; left++,right-=2,bottom-=2){
        fillToRight(matriz,top,left,right);
        fillToDown(matriz,right,++top,bottom);
        fillToLeft(matriz,bottom,right,++left);
        fillToUp(matriz,left,bottom,++top);
    }
 
    //Muestro el contenido de la matriz
    for(x=0;x<FILAS;x++)
        printf("%s",matriz[x]);
 
    getchar();
    return 0;
}

Por cierto, no te acostumbres a que te lo den todo mascadito, la proxima vez pon tu codigo y pregunta por dudas concretas porque si no eres capaz ni de eso quizas merezcas quedarte este trimestre.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de FELIPE

Dibujar un espiral

Publicado por FELIPE (2 intervenciones) el 05/01/2017 22:21:44
Lo que pasa es que si está empezando ella a aprender este tipo de programación, es merecedora a recibir todo el apoyo de su Maestro. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar