• Jueves 2 de Mayo de 2024, 03:55

Autor Tema:  no funciona este codigo "se ha producido una violacion de acceso a memoria"  (Leído 1679 veces)

bones.felipe

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
no funciona este codigo "se ha producido una violacion de acceso a memoria"
« en: Sábado 10 de Diciembre de 2011, 06:29 »
0
buenas a todos,

soy nuevo por aqui y en c++ espero me puedan ayudar :D, tengo este codigo un poco largo xD, y al ejecutar las opciones 2 y 3 del switch al final cuando el programa intenta salir este se cierra inesperadamente (estoy trabajando en dev), al depurarlo me sale este aviso: "se ha producido una violacion de acceso a memoria", no se q pueda estar pasando por que sin el switch corre perfectamente, pero al ponerlo se daña.

les agradezco su ayuda!
 :ayuda:

Código: [Seleccionar]
#include <cstdlib>
#include <iostream>

using namespace std;

int series (int n) {
   
    int i=0 ,a,b,temp=0;
    cout<<"introduzca el inicio de todas las series"<<endl;
    cin>>b;
    cout<<"introduzca el tope para todas las series "<<endl;
    cin>>a;
    cout<<endl<< "Serie de Impares :"<<endl<<endl;
                   
          if(b % 2 == 0){
          for(temp=b+1;temp<a;temp=temp+2) {   //serie de impares         
          cout<<temp<<", " ;
          }
           if(a % 2 ==! 0){
                     cout<<a<<endl;
                     }
          }
          else
          {
          for(temp=b;temp<a;temp=temp+2) {   //serie de impares         
          cout<<temp<<", " ;
          }
           if(a % 2 ==! 0){
                     cout<<a<<endl;
                     }
          }               
           
     cout<<endl<<endl<<"Serie de Pares :" <<endl<<endl;
     if (b % 2 == 0)  {
           for (temp=b;temp<a;temp=temp+2){  // Serie de Pares
              cout<<temp<<", " ;           
                }
                if(a % 2 == 0){
                     cout<<a<<endl;
                     }
     }
     else {
      for (temp=b+1;temp<a;temp=temp+2){  // Serie de Pares
              cout<<temp<<", " ;           
                }
                if(a % 2 == 0){
                     cout<<a<<endl;
                     }
      }
                     
                     
     cout<<endl<<endl<<"Serie de Cuadrados :" <<endl<<endl;     
     for (i=b;i<=a;i++){                   // Serie De cuadrados
         temp=i;
         temp=temp*temp;
         cout<<temp<<", " ;
         }
       cout<<endl<<endl<<"Serie de Cubos :" <<endl<<endl;
     
     for (i=b;i<=a;i++){
         temp=i;
         temp=temp*temp*temp;
         cout<<temp<<", " ;
         }       
}

void serie (int num){ //serie de numeros
     int num2,i;
    num2=0;
    for(i=1; i<=num; i++){
                  num2=i+num2;
                  cout<<num2<<" ";
                 }   
    cout<<endl;
    }     

int fib (int a, int b) { // Serie de Fibonacci


int i,c,d=0,e=1 ;



if (a==0 && b==1){
         cout<<"0 , 1"<<endl;
         }         
while(c != a){
            c=d+e;           
            e=d;
            d=c;
}
cout<<a<<" , ";
while(c != b){
c = d+e ;
e=d ;
d=c;
cout<<c<<" , ";
}           
}




void inv (char p[], int n){
    char e;
    int i,j,cont=1,a;
    a=n/2;
   
    for (i=0;i<n;i++){
        cout<<endl<<"Por favor introduzca el caracter de la posicion "<<i<<endl;
        cin>>p[i];
        }
       
    for (i=0;i<n;i++){
        cout<<p[i]<<" ";
        }
   
   
   
    for (i=0; i<a;i=i+1){
        e=p[i];
        p[i]=p[n-cont];
        p[n-cont]=e;
        cont=cont+1;
    }
   
    cout<<endl<<"la matriz invertida es:"<<endl;
       for (i=0;i<n;i++){
        cout<<p[i]<<" ";
        }
   
   
   
}

int factorial ( int c ) { //Factorial

int a,b,i ;
   
a=1;
for(i=1;i<=c;i++){
a=a*i;
}
c=a;
}

   

int pasca (int nivel){ //pascal
   long int a,b,d,i,e ;
   
   
    cout<<endl<<endl;
    a=nivel;   
    cout<<" 1"<<endl;
    for (i=1;i<=nivel;i++){
    for(b=0;b<=nivel;b++) {                       
    d = (factorial(i))/((factorial(i-b))*(factorial(b)));
   
    cout<<" "<<d;

}
cout<<endl;
}   
}

int rep (int n,int m) { //encontrar repeticiones de caracter, y sus posiciones.
    int k[n],i,x=0,y;
    for(i=0;i<n;i++) {
    cout<<"ingrese el caracter de la posicion "<<i<<endl;
    cin>>k[i];
}

cout<<endl<<"Hay repeticiones del caracter '"<<m<<"' "<<"en las posiciones " ;
    for(i=0;i<n;i++){
    if(k[i] == m){
    x=x+1;
    cout<<i<<", ";
}

}
cout<<endl<<"y se repitio "<<x<<" veces"<<endl<<endl ;
   
}


void orden (char p[], int n){
     int temp,i,j;
 
 cout<<endl<<"Usted Introdujo La matriz: "<<endl;
 for (i=0;i<n;i++){
        cout<<p[i]<<" ";
        }   

     for (int i=1; i<n; i++){
         for (int j=0 ; j<n-1; j++){
               if (p[j] > p[j+1]){
                    temp = p[j];
                    p[j] = p[j+1];
                    p[j+1] = temp;
               }
         }
     }
 
 cout<<endl<<"Matriz Ordenada:"<<endl;   
    for (i=0;i<n;i++){
        cout<<p[i]<<" ";
        }   
     
}

void mat1 (int m , int n) { //organizar matrices de derecha a izquierda y de abajo hacia arriba
    int mat[m][n];
    int i,j,c=0;
   
    for(i=m-1;i>=0;i--){   
    for(j=n-1;j>=0;j--){
    mat[i][j]=c;   
    c=c+1;   
}
}
cout<<endl<<"organizar matrices de derecha a izquierda y de abajo hacia arriba"<<endl;
for(i=0;i<m;i++){
     cout<<endl;
     for (j=0;j<n;j++){
         cout<<mat[i][j] <<"\t";
         }               
     }
cout<<endl;
}


void car1(int a, int b){
     int x[a][b], num=0,i,j;
     for(int i=0; i<a; i++){
         for(int j=0; j<b; j++){
              x[i][j]=num;
              num=num+1;
         }
     }
     
     cout<<endl<<endl<<"Organizar por filas de izquierda a derecha y de arriba hacia abajo"<<endl;
     for (i=0; i<a; i++){
         cout << endl;
         for (j=0; j<b; j++){
             cout << x[i][j] << "\t";
         }
     }cout << endl;
}

void mat2 (int m , int n) { //Por Columnas de derecha izquierda y de abajo hacia arriba
    int mat2 [m][n] ;
    int a=0,i,j;

   
   
    for(i=0;i<n;i++){
    for(j=m-1;j>=0;j--){
    mat2[j][i]=a;
    a=a+1;   
                        }
    }
  cout<<endl<<"organizar matrices Por Columnas de derecha izquierda y de abajo hacia arriba"<<endl; 
    for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat2[i][j]<<" \t";
        }
}

}


void car2 (int a, int b){
     int e[a][b], h=0,i,j;
     for (j=0; j<b; j++){
         for (i=0; i<a; i++){
              e[i][j]=h;
              h=h+1;
         }
     }
     
     cout<<endl<<"ordenar por Columnas de izquierda a derecha de arriba hacia abajo"<<endl;
     for (int i=0; i<a; i++){
         cout << endl;
         for (int j=0; j<b; j++){
             cout << e[i][j] << "\t";
         }
     }cout << endl;
}

void mat3 (int m, int n) { // las posiciones por encima de la diagonal con 1
     int mat[m][n] ,i,j,a=1;
     
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     mat[i][j]=0;
     }
     }
     
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     if(j>i){
     mat[i][j]=a;
     a=a+1;
     }
     }
     }

  cout<<endl<<endl<<"organizar las posiciones por encima de la diagonal con enteros desde 1 "<<endl; 
     
     cout<<endl;
     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat[i][j]<<" ";
        }
     }
     
}

void mat6 (int m, int n) { // Los posiciones debajo de la diagonal principal con números enteros negativos comenzando en -1
     int mat[m][n] ,i,j,a=-1;
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     mat[i][j]=2;
     }
     }
     
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     if(j<i){
     mat[i][j]=a;
     a=a-1;
     }
     }
     }

  cout<<endl<<endl<<"organizar las posiciones por debajo de la diagonal con numeros negativos empezando en -1 "<<endl; 
     
     cout<<endl;
     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat[i][j]<<" ";
        }
     }
     
}

void mat4 (int m , int n){ // diagonal prinicipal con los multiplpos de 5
     int mat[m][n] ,i,j,a=1;
     
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     mat[i][j]=0;
     }
     }
     
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     if(i==j){             
     mat[i][j]=a;
     a=a*5;
     }
     }
     }
       cout<<endl<<endl<<"diagonal prinicipal con los multiplpos de 5 "<<endl; 
     cout<<endl;
     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat[i][j]<<" ";
        }
     }
     
}

void mat8 (int m , int n){ // diagonal prinicipal con los multiplpos de 5
     int mat[m][n] ,i,j,a=3;
     srand(time(0));
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     mat[i][j]=rand()%50;
     }
     }
     
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     if(i+j==n-1){             
     mat[i][j]=a;
     a=a*3;
     }
     }
     }
       cout<<endl<<endl<<"diagonal opuesta a la diagonal principal con multiplos de 3 "<<endl; 
     cout<<endl;
     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat[i][j]<<" ";
        }
     }
     
}

int mat5 (int m, int n, int &c){ //suma de los elementos de la matriz
    int mat[m][n],i,j,d,a=0;   
     
   for(i=0;i<m;i++){
   for(j=0;j<n;j++){
   mat[i][j]=a;
   a=a+1;
}
}
   
    for(i=0;i<m;i++){
    for(j=0;j<n;j++){
    d=mat[i][j];
    c=c+d;
                }
    }
}

int mat7 (int m, int n){ //suma de las filas
    int mat [m][n], a=0,b=0,i,j;
   
       for(i=0;i<=m;i++){
   for(j=0;j<n;j++){
   mat[i][j]=a;
   a=a+1;   
               }
   }
   
   cout<<endl<<endl<<endl<<"suma de las filas "<<endl;
   
     cout<<endl;
     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat[i][j]<<"\t";
        }
     }
     
       
   cout<<endl;
 for(i=0;i<=m-1;i++){
 b=0;
 for(j=n-1;j>=0;j--){
 if(i == 2){                                 
 b=mat[j][i]+b;
}
else
{
   b=b+mat[i][j]; 
}
}
cout<<" la suma de los elementos de la fila: "<<i<<" es "<<b<<endl;
}
}

int mat9 (int m, int n){ //resta de los elementos de las columnas de abajo hacia arriba
    int mat [m][n], a=0,b=0,i,j;
   
       for(i=0;i<=m;i++){
   for(j=0;j<n;j++){
   mat[i][j]=a;
   a=a+1;   
               }
   }
   
   cout<<endl<<endl<<endl<<"resta de los elementos de las columnas de abajo hacia arriba  "<<endl;
   
     cout<<endl;
     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){
        cout<<mat[i][j]<<" ";
        }
     }
     
       
   cout<<endl;
 for(i=0;i<=n-1;i++){
 b=0;
 for(j=m-1;j>=0;j--){
 if(j == m-1){                                 
 b=mat[j][i]-b;
}
else
{
   b=b-mat[j][i]; 
}
}
cout<<" la resta de los digitos de abajo hacia arriba de la columna : "<<i<<" es "<<b<<endl;
}
}

int mat10 (int m, int n){ //multiplicacion de las columnas en un vector
    int mat [m][n], a=0,b=1,i,j, vec[m],o=0;
   
       for(i=0;i<=m;i++){
   for(j=0;j<n;j++){
   mat[i][j]=a;
   a=a+1;   
               }
   }
   
   cout<<endl<<endl<<endl<<"multiplicacion de las columnas y guardarlas en un vector  "<<endl;
   
     cout<<endl;

     for (i=0;i<m;i++){
        cout<<endl;
        for(j=0;j<n;j++){       
        cout<<mat[i][j]<<" ";
        }
     }
     
       
   cout<<endl;
 for(i=0;i<=n-1;i++){
 b=1;
 for(j=m-1;j>=0;j--){
 if(j == m-1){
      o=o+1;                                 
 b=mat[j][i]*b;
 
}
else
{
   b=b*mat[j][i]; 
}
vec[o]=b;
}
cout<<" la multiplicacion de la columna : "<<i<<" es "<<vec[o]<<endl;
}
}

int fibon (int a){
    int x;   
    if(a==0||a==1){
    x=a;
}
else
{
x=fibon(a-1)+ fibon(a-2);         
}       
    return (x);
}

int fc (int n){
    int x;
    if(n==0){
             x=1;
             }
    else{
         x=n*fc(n-1);
         }
    return(x);
}

int mult ( int a, int b ){
   int n ;
   
   if(b==1){
   n=a;   
}
else
{
    n=a+mult(a,b-1);
}
return(n);
}

int ex (int n, int m){
    int x;
    if(m==1){
             x=n;
             }
    else{
         x=n*ex(n, m-1);
         }
    return(x);
}



int main(int argc, char *argv[])
{
   
 
    int var=0,a,b,num;
    char x;
    int s;
   
 
       
    system ("cls");
    cout<<endl<<"Por favor introduzca la opcion deseada"<<endl;
    cout<<"Opcion (1) Algoritmos para  aplicación de conceptos Basicos"<<endl;
    cout<<"Opcion (2) Algoritmos con criterios de Simplicidad y Modularidad para el Manejo de Arreglos y Matrices "<<endl;
    cout<<"Opcion (3) Implementación de Algoritmos Recursivos"<<endl;
    cout<<"Opcion (4) Para salir a windows "<<endl;
   
    cin>>s;
   
    switch (s){
           case 1 :
             
   
    series (var);
   
    cout<<endl<<endl<<"Escriba limite superior de la sucesion 1, 3, 6, 10, 15, 21, 28, 36, 45, ..."<<endl;
    cin>>num;
   
    serie(num);
   
    cout<<endl<<endl<<"introduzca el intervalo de la sucesion de fibonacci" <<endl<<endl;     
    cin>>a ;
    cin>>b ;
   
    fib (a,b);
   
    cout<<endl<<"Por favor introduzca el nivel maximo del triangulo de pascal"<<endl;
    cin>>a;
   
    pasca (a);
 
    break;
   
    case 2 :
   
   cout<<"Por Favor digite la longitud de un vector dado"<<endl;
   cin>>b;
   
   
   char vector[b];
   
   inv (vector, b);
   
   cout<<endl<<endl<<"por favor digite el caracter a encontrar"<<endl;
   cin>>a;
   
   rep (b,a);
   
   cout<<endl<<endl<<"Ordenacion del vector de menor a mayor de izquierda a derecha"<<endl;
   
   orden (vector ,b);
   
    cout<<endl<<"Por favor ingrese el tamaño de una matriz"<<endl;
    cin>>a>>b;
   
     mat1(a,b);
     car1(a,b);
     mat2(a,b);
     car2(a,b);
     mat3(a,b);
     mat6(a,b);
     mat8(a,b);
     mat5(a,b,var);
     mat7(a,b);
     mat10(a,b);     
     
     break ;
     
     case 3:
   
   cout<<endl<<"Introduzca la posicion de la sucesion de fibonacci que desea"<<endl;
    cin>>a;
   
    b=fibon(a);     
    cout<<"El numero de la posicion "<<a<<" es : '"<<b<<"'"<<endl;
   
    cout<<endl<<"Digite el numero el cual desea sacar el factorial"<<endl;
    cin>>a;
    b=fc(a);
    cout<<"El factorial del numero "<<a<<" es "<<b<<endl;
   
    cout<<endl<<"Introduzca los numeros a multiplicar"<<endl;
    cin>>a>>b;
   
    var = mult (a,b);
    cout<<endl<<"El Resultado es : "<<var<<endl;
   
    cout<<"Digite el numero base"<<endl;
    cin>>a;
    cout<<"Digite el numero exponente"<<endl;
    cin>>b;
    var=ex(a, b);
    cout<<a<<" elevado a la "<<b<<" es igual a "<<var<<endl;
       
    break ;     
}


    system("PAUSE");
    return EXIT_SUCCESS;
}