Ayuda por favor! programa en C

#1
Hola Bakunos, solo para pedirles un poco de ayuda por favor, ya que no soy muy bueno programando...:(
Necesito un programa en el que a una matriz, se le puedan agregar dos columnas y dos filas... si me explico?

asi miren:
(original)
123
456
789
(a la salida del programa)
00000
01230
04560
07890
00000

osea que todo quede rodeado de 0's.

por favor bakunos!!!!
ayuda!


MIREN, TENGO ESTE CODIGO YA HECHO EN TURBO C JEJE.

#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
//using namespace std;
void main()
{
ifstream entrada("matriz.txt");
ifstream input;
char c;
input.open("matriz.txt");
if (entrada.good())
cout << "El archivo matriz.txt fue abierto correctamente";
else
cout << "El archivo matriz.txt no pudo ser abierto correctamente";
cout << endl;
entrada >> c;
entrada.close();
input.close();
cout << c << endl;
}

y ya me abre el archivo,ya solo me falta agregar lo de los ceros a la salida, pero no se como hacer eso...

GRACIAS BAKUNOS!

Hola bakunos, gracias a todos los que me han ayudado, llevo este avance en el programa, ya me genera n archivo nuevo y yame rodea la matriz de 0's.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
FILE *nombre;
FILE *nombre2;
char palabra[100];
char palabra2[100];
int cols=0;
int rows=0;
int c;
int ch;
nombre = fopen("matriz.txt", "r");
if (nombre == NULL)
{
printf("El archivo no existe \n");
exit (EXIT_FAILURE);
}
else
{
do
{
rows++;
c = fscanf(nombre, "%s", palabra);
}
while (c != EOF);
}

cols = strlen(palabra);
cols += 2;
nombre2 = fopen("newmatriz.txt", "w");
nombre = fopen("matriz.txt", "r");
if (nombre2 == NULL)
{
printf("Falla al abrir el archivo \n");
exit (EXIT_FAILURE);
}
int wh=0;
while(wh<cols)
{
putc('0', nombre2);
wh++;
}
putc('\n', nombre2);
do
{
c = fscanf(nombre, "%s", palabra2);
fprintf(nombre2, "0%s0\n",palabra2);
}
while (c != EOF);
wh=0;
while(wh<cols)
{
putc('0', nombre2);
wh++;
}

fclose(nombre);
fclose(nombre2);
return EXIT_SUCCESS;
}
Ahora solo me falta que me separe todo en capas, algo asi:

Matriz original:
123
456
789
012
345
678

Matriz a la salida
00000
01230
04560
07890
00000
00120
03450
06780
00000

si notan la diferencia de una capa y otra comoqueda rodeada de ceros. Ayuda Bakunos!!

Gracias a todos los que me han posteado, me han servido de mucho... Saludos!
 

Zephyros

Bovino de la familia
#5
Pues miraSi no eres bueno mejor ya no lo intentes y dedicate de taquero, ya que por lo que he visto aqui no se hace la tarea a nadien.
No es aunqe es aun que, pues si no puedes de taquero he oido hablar que los que piden limosna ganan muy bien, y si son vacaciones que vacaciones aburridas te pasas.
Reportado por desvirtuar temas, si no quieres ayudar ni te molestes en entrar a esta sección.

>> A=[1 2 3;4 5 6;7 8 9];
p=size(A);
B=zeros(p(1)+2,p(2)+2)
B(2:(p(1)+1),2:(p(2)+1))=A

gracias zephyros, tengo eso en matlab ya, es que estoy viendo la manera de hacerlo en matlab ya que es masfacil manejar matrices

pero bueno. gracias de todas formas...
Pero entonces lo que debes aprender es a utilizar Matlab, aunque Matlab soporta programación en C, no es para nada lo mismo.
 
#9
io igualmente estaba haciendo algo. emmm, solo que me quede dormido ayer, y ahorita saldré, pero en cuanto regrese seguiré... espero te sirva de algo
 
#11
Puedo ayudarte amigo... pero me gustaria ver tu codigo completo... y que fueras mas especifico en lo que deseas ke haga el programa... es decir:

la matriz inicial es de 3 x 3?
el usuario es quien ingresa los valores o los lees del archivo previamente creado?
solo debe mostrar en pantalla la matriz rodeada de ceros? o debe modificar el arreglo y volverlo de 4x4 e ingresar ahi los ceros?


Saludos!
 
#12
Puedo ayudarte amigo... pero me gustaria ver tu codigo completo... y que fueras mas especifico en lo que deseas ke haga el programa... es decir:

la matriz inicial es de 3 x 3?
el usuario es quien ingresa los valores o los lees del archivo previamente creado?
solo debe mostrar en pantalla la matriz rodeada de ceros? o debe modificar el arreglo y volverlo de 4x4 e ingresar ahi los ceros?


Saludos!
HOLA, pues primero que nada agradecerte, y bueno, lo que originalmente queria que hiciera el programa es que me rodeara de ceros todos los elementos de la matriz. Pero loque sucede es que no siempre la matriz va a ser especificamente de 3 X 3, puede variar el tamaño. Y bueno, lo que hice en el codigo en C que puse abajito del de MATLAB, es que me abre un archivo TXT y logro que me lo modifique, pero me lo cambia completamente, yo soloq uiero que me le rodee de 0's.
 
#13
Pues mira mi amigo... la verdad no conosco matlab asi ke ahi no podria apoyar, pero en C soy bueno, y no lo digo en son de presunción, sino como para que no pienses ke pierdes el tiempo conmigo.
Según entiendo tu definiras las matrices y para eso no tienes problema, entonces solo debes de dar la intruccion para imprimir los ceros donde desees, ejemplo:

printf("0000"); /* para esto si no sabes de cuanto es la matriz y por lo tanto cuantos numeros vas a necesitar, puedes usar un ciclo para medir la longitud de las filas de la matriz y ese numero usarlo en un for como valor de paro para escribir los 0´s. */

printf("0 <primera linea de la matriz> 0") //de igual manera esto lo puedes hacer con un ciclo.
printf("0 <segunda linea de la matriz> 0")
.
.
.
printf("0 <'n' linea de la matriz> 0")

printf("0000"); //otra vez con el ciclo para ke imprimas los 0´s necesarios.

te dejo mi correo x si puediera apoyarte en algo mas:

alberto16_04@hotmail.com

Saludos!
 
#14
Hola, en realidad estás manejando conceptos diferentes ahi. Para generar una matriz cuadrada (es decir donde m=n, o dicho de otra forma, con número de columnas igual al número de filas) utilizando c es muy sencillo. Lo que tendrias que buscar (como referencia) es el manejo de arrays. Ahora necesitas que sea en ANSI C o hay flexibilidad de que sea en C++? El approach es casi el mismo, pero el manejo de memoria es un poco diferente y la sintaxis (para mi al menos) es más comoda en C++. Si quieres mandame un mensaje privado y lo revisamos a detalle.
 
Arriba