daniel_tv
Bovino Milenario
- Desde
- 31 Jul 2007
- Mensajes
- 1.381
- Tema Autor
- #1
Ayuda con C, apuntadores, matrices dinamicas!!!
Hermanos bakunos, vengo humildemente a solicitar su ayuda
:
estaba yo programando alegremente un programita sencillo de suma de matrices con arreglos y me salio, pero el problema es que yo no lo necesitaba con matrics dinamicas, y cuando lo empece a pasar, me salio un problema, para pedir las matrices, el programa se ejecuta con normalidad, pero al querer guardar los datos empieza el problema, ya estuve un buen rato pensandole y estudiandole, pero nada mas no veo el meollo del asunto...
Si alguien pudiera explicarme cual es el error de mi codigo se lo agradeceria infinitamente!!! xD apenas estoy aprendiendo apuntadores y si ademas de la explicacion pudieran pasar una buena guia de apuntadores se los agradeceria aun mas
jajaja bueno, les dejo el codigo y el archivo por si encuentran un ratito libre para ayudar a este bovino desamparado.... de antemano gracias!!!!
ARCHIVO ".C" : http://www.mediafire.com/?dmnm2qjmkie
#include <stdlib.h>
#include <stdio.h>
int ingres_A();
int ingres_B();
int suma();
int valor();
int **A, **B, **C;
int m, n, s, t, i, j, x, y;
main(){
char OPT;
do{
menu();
OPT=getche();
switch(OPT){
case 'a':
case 'A':
ingres_A();
break;
case 'b':
case 'B':
ingres_B();
break;
case 'c':
case 'C':
suma();
break;
}
}while(OPT!='s' && OPT!='S');
}
menu(){
system("CLS");
printf("\n\tSUMA DE MATRICES DE ORDEN M x N");
printf("\n\n\tSelecciona: ");
printf("\n\n\ta) Ingresar matriz A");
printf("\n\n\tb) Ingresar matriz B");
printf("\n\n\tc) Calcular A + B");
printf("\n\n\ts) Salir");
valor();
}
ingres_A(){
system ("CLS");
printf ("\nIngresar matriz A.");
printf ("\n\n\tIngrese el orden m x n de la matriz.");
printf ("\n\n\tm: ");
scanf ("%d", &m);
printf ("\n\tn: ");
scanf ("%d", &n);
A = (int **) calloc (m, sizeof (int*));
for (i=0;i<m;i++){
A = (int*) malloc (n * sizeof (int));
}
for (i=0;i<m;i++){
for (j=0;j<n;j++){
printf("\nIngrese termino %d,%d: ", i+1, j+1);
scanf ("%d", *(A+i)+j);
}
}
}
ingres_B(){
system ("CLS");
printf ("Ingresar matriz B.");
printf ("\n\n\tIngrese el orden m x n de la matriz.");
printf ("\n\n\tm: ");
scanf ("%d", &s);
printf ("\n\tn: ");
scanf ("%d", &t);
B = (int **) calloc (s, sizeof (int*));
for (i=0;i<s;i++){
B= (int*) malloc (t * sizeof (int));
}
for (i=0;i<s;i++){
for (j=0;j<t;j++){
printf("\nIngrese termino %d,%d: ", i+1, j+1);
scanf ("%d", *(B+i)+j);
}
}
}
suma(){
int uno, dos;
system ("CLS");
if (m!=s||n!=t){
printf("\tLas matrices no son conformables para la adicion.");
printf("\n\n\tIntente con nuevas matrices.");
getchar();
}
else{
uno=m;
dos=n;
printf("\nCalculo de A + B");
printf("\n\nA + B:\n\n");
for(x=0;x<uno;x++){
for (y=0;y<dos;y++){
*(*(C+x)+y)=*(*(A+x)+y)+*(*(B+x)+y);
printf("%d ", *(*(C+x)+y));
}
printf("\n");
}
}
system("PAUSE");
}
valor(){
printf("\n\n\nVALORES DE A Y B:");
printf("\n\nMatriz A:\n\n");
for (i=0;i<m;i++){
for (j=0;j<n;j++){
printf("%d ", *(*(A+i)+j));
}
printf("\n");
}
printf("\n\nMatriz B:\n\n");
for (i=0;i<s;i++){
for (j=0;j<t;j++){
printf("%d ", *(*(B+i)+j));
}
printf("\n");
}
}
Hermanos bakunos, vengo humildemente a solicitar su ayuda

estaba yo programando alegremente un programita sencillo de suma de matrices con arreglos y me salio, pero el problema es que yo no lo necesitaba con matrics dinamicas, y cuando lo empece a pasar, me salio un problema, para pedir las matrices, el programa se ejecuta con normalidad, pero al querer guardar los datos empieza el problema, ya estuve un buen rato pensandole y estudiandole, pero nada mas no veo el meollo del asunto...
Si alguien pudiera explicarme cual es el error de mi codigo se lo agradeceria infinitamente!!! xD apenas estoy aprendiendo apuntadores y si ademas de la explicacion pudieran pasar una buena guia de apuntadores se los agradeceria aun mas

ARCHIVO ".C" : http://www.mediafire.com/?dmnm2qjmkie
#include <stdlib.h>
#include <stdio.h>
int ingres_A();
int ingres_B();
int suma();
int valor();
int **A, **B, **C;
int m, n, s, t, i, j, x, y;
main(){
char OPT;
do{
menu();
OPT=getche();
switch(OPT){
case 'a':
case 'A':
ingres_A();
break;
case 'b':
case 'B':
ingres_B();
break;
case 'c':
case 'C':
suma();
break;
}
}while(OPT!='s' && OPT!='S');
}
menu(){
system("CLS");
printf("\n\tSUMA DE MATRICES DE ORDEN M x N");
printf("\n\n\tSelecciona: ");
printf("\n\n\ta) Ingresar matriz A");
printf("\n\n\tb) Ingresar matriz B");
printf("\n\n\tc) Calcular A + B");
printf("\n\n\ts) Salir");
valor();
}
ingres_A(){
system ("CLS");
printf ("\nIngresar matriz A.");
printf ("\n\n\tIngrese el orden m x n de la matriz.");
printf ("\n\n\tm: ");
scanf ("%d", &m);
printf ("\n\tn: ");
scanf ("%d", &n);
A = (int **) calloc (m, sizeof (int*));
for (i=0;i<m;i++){
A = (int*) malloc (n * sizeof (int));
}
for (i=0;i<m;i++){
for (j=0;j<n;j++){
printf("\nIngrese termino %d,%d: ", i+1, j+1);
scanf ("%d", *(A+i)+j);
}
}
}
ingres_B(){
system ("CLS");
printf ("Ingresar matriz B.");
printf ("\n\n\tIngrese el orden m x n de la matriz.");
printf ("\n\n\tm: ");
scanf ("%d", &s);
printf ("\n\tn: ");
scanf ("%d", &t);
B = (int **) calloc (s, sizeof (int*));
for (i=0;i<s;i++){
B= (int*) malloc (t * sizeof (int));
}
for (i=0;i<s;i++){
for (j=0;j<t;j++){
printf("\nIngrese termino %d,%d: ", i+1, j+1);
scanf ("%d", *(B+i)+j);
}
}
}
suma(){
int uno, dos;
system ("CLS");
if (m!=s||n!=t){
printf("\tLas matrices no son conformables para la adicion.");
printf("\n\n\tIntente con nuevas matrices.");
getchar();
}
else{
uno=m;
dos=n;
printf("\nCalculo de A + B");
printf("\n\nA + B:\n\n");
for(x=0;x<uno;x++){
for (y=0;y<dos;y++){
*(*(C+x)+y)=*(*(A+x)+y)+*(*(B+x)+y);
printf("%d ", *(*(C+x)+y));
}
printf("\n");
}
}
system("PAUSE");
}
valor(){
printf("\n\n\nVALORES DE A Y B:");
printf("\n\nMatriz A:\n\n");
for (i=0;i<m;i++){
for (j=0;j<n;j++){
printf("%d ", *(*(A+i)+j));
}
printf("\n");
}
printf("\n\nMatriz B:\n\n");
for (i=0;i<s;i++){
for (j=0;j<t;j++){
printf("%d ", *(*(B+i)+j));
}
printf("\n");
}
}