Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 04.06.2009
Сообщений: 6
1

Динамическая память

04.06.2009, 23:37. Просмотров 716. Ответов 2
Метки нет (Все метки)

Надо ввести массив из файла. Сам массив хранится в динамической памяти. Сколько я над прогой не бился, а вводит данные криво.

С клавиатуры считывает правильно. Все остальное тоже работает. А вот из файла считать понормальному не может.
C++
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <malloc.h>
FILE * f_in, * f_out;
int i,j;
 
void in_klava(int **a, int r, int m)
{
    printf("A? \n");
    for (i=0;i<r;i++)
    {
        for (j=0;j<m;j++)
        scanf("%d",&a[i][j]);
    }
}
void in_file(int **a, int r, int m)
{
    printf("\n Vvedite imja faila \n");
    char fname[256];
    gets(fname);
    f_in = fopen(fname,"r");
    if (f_in==NULL) printf ("oshibka \n");
    else
    {
        for (i=0;i<r;i++)
        for (j=0;fscanf(f_in,"%d ",&a[i][j])==1;j++);
        fclose(f_in);
    }
}
 
void out_display(int **a, int r, int m)
{
    for (i=0;i<r;i++)
    {
        for (j=0;j<m;j++)
        printf("%d | ",a[i][j]);
        printf("\n");
    }
}
int kol_loc(int **a, int r, int m)
{
    int k, t;
    for (i=0;i<r;i++)
    {
        for (j=0;j<m;j++)
        {
            t=1;
            for (int e=-1; e<2; e++)
            {
                if ((i+e)<0 || (i+e)>r-1) continue;
                    for (int d=-1; d<2; d++)
                    {
                        if ((i+d)<0 || (i+d)>m-1) continue;
                        if (a[i][j]>=a[i+e][j+d] && (e!=0) && (d!=0)) t=0;
                    }
            }
            if (t==1) k++;
        }
    }
    return k;
}
void out_file(int **a, int r, int m)
{
    f_out = fopen("f2.txt","w");
    for(i=0; i<r; i++)
    {
        for (j=0;j<m;j++)
        {
        fprintf(f_out, "%d", a[i][j]);
        fprintf(f_out,"\t");
        }
    fprintf(f_out,"\n");
    }
    fclose(f_out);
}
int summa(int **a, int r, int m)
{
    int s;
    s=0;
    for(i=0; i<r; i++)
    {
        for (j=0;j<i;j++)
            s=s+abs(a[j][i]);
    }
    return s;
}
 
void main()
{
    char q;
    int r, m, s, k, exit;
    int **a;
    printf("Vvedite razmer massiva r*m");
    scanf("%d %d",&r,&m);
    a=(int **)calloc(m,sizeof(int *));
    for (i=0; i<=m; i++) a[i]=(int *)calloc(r,sizeof(int));
    exit=false;
    do
    {
        printf("\n Vedite \n 1-Vvod s klaviaturi \n 2-Vvod iz faila\n 3-summa\n 4-Vivod lok_min\n 5-Vivod na ekran \n 6- Zapis massiva v fail \n 7-Konec \n");
        q=getch();
        switch (q)
        {
        case '1':in_klava(a,r,m);break;
        case '2':in_file(a,r,m);break;
        case '3':printf("\n s=%d \n",summa(a,r,m));break;
        case '4':printf("\n k=%d \n",kol_loc(a,r,m));break;
        case '5':out_display(a,r,m);break;
        case '6':out_file(a,r,m);break;
        case '7':exit=true;break;
        default:printf("Oshibka \n");break;
        }
    }
    while (exit==false);
}
помогите плизз. последняя лаба осталась.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2009, 23:37
Ответы с готовыми решениями:

Азы: статическая память, динамическая память, автоматическая память
столько раз приходистя возвращаться к началу, и все благодаря моим преподавателям, которые не...

Статическая память,Динамическая память.
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные...

Динамическая память
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания....

Динамическая память
Добрый вечер! Возникла у меня такая проблемка, нужно от статической памяти перейти к динамической....

2
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
05.06.2009, 00:12 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void in_file(int **a, int r, int m)
{
        printf("\n Vvedite imja faila \n");
        char fname[256];
        gets(fname);
        f_in = fopen(fname,"r");
        if (f_in==NULL) printf ("oshibka \n");
        else
        {
                for (i = 0; i < r; i++)
                    for (j = 0; j < m; j++) {
                        fscanf(f_in,"%d ",&a[i][j]);
                    }
                fclose(f_in);
        }
}
1
1 / 1 / 0
Регистрация: 04.06.2009
Сообщений: 6
05.06.2009, 01:21  [ТС] 3
Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2009, 01:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Динамическая память
Помогите перевести массивы в динамическую память пожалуйста + почему-то не работает запись в...

Динамическая память
Здраствуйте!!!! Помогите выделить память под двумерные массив элементами которого являются слова....

Динамическая память
Народ, если кому не сложно помогите переделать вот эту программу со структурами нужно сделать так...

Динамическая память
Каким способом можно задать динамическую память , кроме как через new ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.