Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Gk_Olga
0 / 0 / 0
Регистрация: 06.11.2018
Сообщений: 1
1

Задание на тему функции, создание меню

06.11.2018, 17:15. Просмотров 318. Ответов 1
Метки нет (Все метки)

Добрый день! Написала программу, но, к сожалению, какие-то явные проблемы с памятью:выводится только первое правильное значение элемента массива. Меню тоже как-то странно работает:хотелось бы, чтобы после выполнения пункта меню оно предлагалось еще раз. Буду благодарна, если подскажете, как исправить.
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Создать программу, которая выполняет действия из задания 1 и задания 2. По запросу с клавиатуры, программа выполняет следующие действия:
//1)    Ввести новый массив (динамический);
//2)    Задание 1 Проверить, есть ли в матрице хотя бы одна строка, содержащая отрицательный элемент, и найти ее номер. Все элементы столбца с таким же номером уменьшить вдвое.
//3)    Вывод массива;
//4)    Задание 2 Напишите программу, которая вводит строки текста в массив символов s [100], используя функцию gets. Выведите строки в верхнем и нижнем регистрах.
//5)    Выход.
//В программе должно быть реализовано меню, каждое действие должно быть реализовано в отдельной функции.
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
 
 
int array_input (int a, int b, int *array);
int ex_1 (int a, int b, int *array);
int output (int a, int b, int *array);
int ex_2(void);
 
 
 
int main(int argc, const char * argv[])
{
    int menu;
    printf("\n   Menu: \n");
    printf("1 - Enter the array (dynamic)\n");
    printf("2 - Check if the array has a row with negative element, find its number\n");
    printf("3 - Output the array\n");
    printf("4 - Intput the char array [100], using gets\n");
    printf("5 - Exit\n");
    scanf("%d",&menu);
    
    while(menu > 5 || menu <= 0)
    {
        printf("Enter another number\n");
        scanf("%d",&menu);
    }
    
    
    int a=0, b=0;
    int *array, *array_copy = NULL;
    
    
    while (1)
    {
        switch(menu)
        {
            case 1:     printf ("Enter the quantity of rows and columns of the array ");
                        scanf ("%d%d", &a, &b);
                        array = ( ((int*)malloc(a*b*sizeof(int))) );
                        array_copy = ( ((int*)malloc(a*b*sizeof(int))) );
                        if(!array)
                        {
                            printf ("Allocation failure.");
                        }
                        *array_copy=array_input (a, b, array);
                
            case 2:  *array_copy=ex_1( a, b, array_copy);
            case 3:  output (a,  b, array_copy); break;
            case 4:  ex_2();
            case 5:  printf ("You finished the program "); break;
        }
 
    
    
}
 
}
 
int array_input (int a, int b, int *array)
{
    for (int i = 0; i<a; i++)                 //input of the array
    {
        for (int j = 0; j<b; j++)
        {
            printf("array[%d][%d] = ", i, j);
            scanf("%d", (array+i*b+j) );
        }
    }
    return (*array);
}
 
int ex_1 (int a, int b, int *array)
{
    for (int i=0;i<a;i++)
 
    {
        int f=0;
        for(int j=0;j<b;j++)
        {
            if (*(array+i*b+j)<0) //find the negative
            {
                f=1;
                printf("number of row with negative is %d ", i);
                for(int k=0, m=i;k<b;k++) // k-row, i-column;
                *(array+m*1+k)/=2;
            
            }
        
        }
        
        if (f==1)
        break;
        
    }
    
     return (*array);
}
 
int output (int a, int b , int *array)
{
    for (int i = 0; i<a; i++)  //output of the  new array's elements
    {
        for (int j = 0; j<b; j++)
        {
            printf("[%d][%d]=%d ", i, j, *(array+i*b+j));
        }
        
    }
    return 0;
}
 
 
int ex_2()
{
    char s[100];
    printf("Input string: ");
    fgets (s,100, stdin ); // input
    int i;
    
    
    for(i = 0; i<100; i++)
        printf("%c", tolower(s[i]));
    printf("\n");
    
    for(i = 0; i<100; i++)
        printf("%c", toupper(s[i]));
    
    return 0;
    
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2018, 17:15
Ответы с готовыми решениями:

Задание на тему "Строки и Функции"
Привет всем. Помогите решить задачу. Не могу понять само задание, т.к. не сталкивался подобным......

Организация меню и создание функции
Доброго времени суток! Я написал два кода 1 .Ввести строку текста. При наличии в строке трех...

Задание на тему матрицы
При помощи случайных чисел ввести матрицу размером 15 на 15 и поменять местами столбец, содержащее...

задание на тему базиса:
Показать, что векторы e1,e2,e3,e4 образуют базис и найти координаты вектора x в этом базисе: ...

Задание на тему классы
реализовать класс студент Свойства 1 ФИО 2 Группа 3 Средний бал Методы 1 Print 2...

1
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
06.11.2018, 21:48 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
int main(int argc, const char * argv[])
{
    int menu;
    
    int a=0, b=0;
    int *array, *array_copy = NULL;
    
    
    while (1)
    {
        printf("\n   Menu: \n");
        printf("1 - Enter the array (dynamic)\n");
        printf("2 - Check if the array has a row with negative element, find its number\n");
        printf("3 - Output the array\n");
        printf("4 - Intput the char array [100], using gets\n");
        printf("5 - Exit\n");
        scanf("%d",&menu);
        
        while(menu > 5 || menu <= 0)
        {
            printf("Enter another number\n");
            scanf("%d",&menu);
        }
 
        switch(menu)
        {
            case 1:     printf ("Enter the quantity of rows and columns of the array ");
                        scanf ("%d%d", &a, &b);
                        array = ( ((int*)malloc(a*b*sizeof(int))) );
                        array_copy = ( ((int*)malloc(a*b*sizeof(int))) );
                        if(!array)
                        {
                            printf ("Allocation failure.");
                        }
                        *array_copy=array_input (a, b, array);
            case 2:  *array_copy=ex_1( a, b, array_copy); 
            case 3:  output (a,  b, array_copy); break;
            case 4:  ex_2(); break;
            case 5:  printf ("You finished the program\n"); return 0;
        }
 
    }
 
}
добавил return и break ,
не понял должны-ли после ввода 1 автоматом выполняться 2 и 3 или тоже нужны break

Со строкой тоже не понял, почему-то fgets нормально работает только если перед ней делать fgetc
и по мелочи что-то поправил
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int ex_2()
{
    char s[100];
    printf("Input string: ");
    fgetc (stdin);
    fgets (s,100, stdin ); // input
    int i;
 
    printf("\n");
   for(i = 0; s[i] !='\0'; i++)
        printf("%c", tolower(s[i]));
 
    for(i = 0; s[i] !='\0'; i++)
        printf("%c", toupper(s[i]));
    printf("\n");
 
    return 0;
}
Добавлено через 1 час 1 минуту
И строка *array_copy=array_input (a, b, array);
просто записывает первый элемент массива array в первый элемент массива array_copy
соответственно работает только output (a, b, array);

в array_input() наверное это
scanf("%d", &array[i*b+j] );
в output () тоже printf("[%d][%d]=%d ", i, j, array[i*b+j]);

дальше не смотрел,) не осилил
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2018, 21:48

Задание на тему Массивы
Найдите в одномерном массиве два элемента,сумма которых максимальна,затем удалитевсе...

Задание на тему Указатели
требуется решить такую задачу на C++ : Имеются N-точек, соединенных отрезками. Составить...

Задание на тему файлы
Помогите пожалйста кто чем-сможет буду очень благодарен! Задание. Дан текстовый файл. Заменить в...


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

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

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