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

Динамические массивы и тип данных float

06.11.2018, 01:07. Просмотров 807. Ответов 8
Метки нет (Все метки)

Здравствуйте, к слову массивы так не создаются, наверное, но dev-c++ такой метод создания принимает и это пока главное для моего этапа обучения. Помогите, пожалуйста, перевести значения массива в тип данных float, или здесь не всё так просто? float array[m][n] и float i, j не работает и было бы странно, если б работало, т.к индексы не могут быть числами с плавающей точкой



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
#include<Windows.h>
#include<math.h>
#include<stdio.h>
 
int main(){
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251); 
 
int m, n, i, j, k;
 
printf("Введите размерность m: ");
scanf("%d", &m);
 
printf("Введите размерность n: ");
scanf("%d", &n);
 
printf("----------------------------------------------------\n");
int array[m][n];
 
 for(i=0; i<m; i++){
   for(j=0; j<n; j++){
    printf("Элемент массива с индексом [%d][%d]: ", i, j);
    scanf("%d", &array[i][j]);
 }  
}
printf("----------------------------------------------------\n");
printf("Введите число к для сравнения с элементами массива: ");
scanf("%d", &k);
printf("----------------------------------------------------\n");
printf("Индексы элементов, значения которых больше чем число k: \n");
 for(i=0; i<m; i++){
   for(j=0; j<n; j++){
    if(array[i][j] > k){
        printf("[%d][%d] \n", i, j);
    }
 }  
}
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2018, 01:07
Ответы с готовыми решениями:

Чтение из файла, тип данных float
Подскажите пожалуйста, в чём может быть проблема, и как её решить, читаю из файла строку, пытаюсь...

Командная строка программы С. Динамические массивы. Обработка символьных и строковых данных
Задание: С клавиатуры вводятся четыре массива слов: - существительные в именительном падеже...

Что такое тип Float(C)?
Я java-программист, но у меня сейчас есть задача распарсить пакет, в котором есть 4 байта формата...

Тип float неверно работает
Писал код, запустил, неправильный результат. Через некоторое время понял, что проблемы с типом...

Ввод целого числа в тип float
Всем привет.У меня может немного глупый вопрос,но все же хочется разъяснить,а то в интернете и на...

8
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
06.11.2018, 01:29 2
Лучший ответ Сообщение было отмечено TM1596 как решение

Решение

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
#include<stdio.h>
#include<malloc.h>
 
int main(){
// SetConsoleCP(1251);
// SetConsoleOutputCP(1251); 
 
int m, n, i, j;
float k, **array;
 
printf("Введите размерность m: ");
scanf("%d", &m);
    array = (float**) malloc(m*sizeof(float*));
printf("Введите размерность n: ");
scanf("%d", &n);
    for (i=0;i<n;++i){
        array[i] = (float*) malloc(m*sizeof(float));
    }
printf("----------------------------------------------------\n");
 
 for(i=0; i<m; i++){
   for(j=0; j<n; j++){
    printf("Элемент массива с индексом [%d][%d]: ", i, j);
    scanf("%f", &array[i][j]);
 }
}
printf("----------------------------------------------------\n");
printf("Введите число к для сравнения с элементами массива: ");
scanf("%f", &k);
printf("----------------------------------------------------\n");
printf("Индексы элементов, значения которых больше чем число k: \n");
 for(i=0; i<m; i++){
   for(j=0; j<n; j++){
    if(array[i][j] > k){
        printf("[%d][%d] \n", i, j);
    }
 }  
}
}
// gcc linux
1
TM1596
1 / 1 / 0
Регистрация: 10.12.2016
Сообщений: 41
06.11.2018, 01:33  [ТС] 3
А можно обойтись без подключения инклуда и создания динам.массива таким способом?
1
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
06.11.2018, 01:44 4
заметил какой-то глюк , если пытаться ввести сразу все значения
Введите размерность m: 3 2 1.2 3.4 5.6 7.8 1.2 3.5
Введите размерность n: ----------------------------------------------------
Segmentation fault (core dumped)
вылетает с ошибкой
Хотя если ввести m и n , а потом остальную пачку значений то вроде нормально.
Наверное так и должно быть ,)

Добавлено через 1 минуту
Попробуйте , должно быть можно

Добавлено через 5 минут
кстати да работает

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
int m, n, i, j;
float k;
 
 ........
float array[m][n];
 
......
    printf("Элемент массива с индексом [%d][%d]: ", i, j);
    scanf("%f", &array[i][j]);
......
 
printf("Введите число к для сравнения с элементами массива: ");
scanf("%f", &k);
.....
1
TM1596
1 / 1 / 0
Регистрация: 10.12.2016
Сообщений: 41
06.11.2018, 01:46  [ТС] 5
Сейчас не имею возможности проверить код, но большое вам спасибо за оперативную помощь
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,326
06.11.2018, 02:17 6
Цитата Сообщение от TM1596 Посмотреть сообщение
Здравствуйте, к слову массивы так не создаются,
Как "так не создаются"? Ничего необычного в процессе создания массивов в вашем коде я не вижу.

Цитата Сообщение от TM1596 Посмотреть сообщение
Помогите, пожалуйста, перевести значения массива в тип данных float,
Просто замените int array[m][n] на float array[m][n], а также для ввода/вывода значений типа float через scanf/printf используйте формат %f. Все.

Цитата Сообщение от TM1596 Посмотреть сообщение
float i, j не работает
Так зачем же вы пытаетесь менять тип индексов? Не надо этого делать.
1
COKPOWEHEU
1258 / 904 / 209
Регистрация: 09.09.2017
Сообщений: 3,824
06.11.2018, 09:35 7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как "так не создаются"? Ничего необычного в процессе создания массивов в вашем коде я не вижу.
У него используется VLA, вроде бы это нестандартное расширение и не все компиляторы его поддерживают.
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
#include <stdio.h>
#include <stdlib.h>
 
int main(){
  unsigned int m,n; //индекс массива не должен быть отрицательным. Не то чтобы не может - язык-то не против
  printf("Array size, MxN: ");
  scanf("%u%u", &m, &n);
  
  float *arr = (float*)malloc(sizeof(float)*m*n); //выделяем память под двумерный массив
  if(arr == NULL){ //не забываем проверку!
    fprintf(stderr, "Can not allocate array [%u x %u]\n", m,n);
    return -1;
  }
  
  unsigned int i,j;
  for(j=0; j<n; j++)
    for(i=0; i<m; i++){
      printf("array[%u; %u] = ", i, j);
      scanf("%f", &arr[ i + m*j ]); //вот так организуется адресация к двумерному массиву
    }
    
  float ref;
  printf("Value to compare = ");
  scanf("%f", &ref);
  
  printf("Elements more than %f :\n", ref);
  for(j=0; j<n; j++)
    for(i=0; i<m; i++)
      if(arr[ i + j*m ] > ref)printf("[%u; %u]\t", i, j);
  printf("\n");
  
  free(arr); //не забываем освободить память!
}
Код
$ gcc main.c -Wall -Wextra
$ ./a.out 
Array size, MxN: 2 3
array[0; 0] = 1
array[1; 0] = 2
array[0; 1] = 3
array[1; 1] = 4
array[0; 2] = 3
array[1; 2] = 2
Value to compare = 2
Elements more than 2.000000 :
[0; 1]  [1; 1]  [0; 2]
2
TM1596
1 / 1 / 0
Регистрация: 10.12.2016
Сообщений: 41
06.11.2018, 09:35  [ТС] 8
Не все компиляторы позволят так создать массив, вижуал требует коестантого значения размерности до компиляции
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,326
06.11.2018, 10:36 9
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
У него используется VLA, вроде бы это нестандартное расширение и не все компиляторы его поддерживают.
VLA - стандартное свойство языка С, а никакое не расширение. То, что "не все компиляторы его поддерживают" никак не делает VLA менее стандартными.
0
06.11.2018, 10:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2018, 10:36

Перевод большого числа в тип float
Здравствуйте! В лабораторной имеется задание - вставить код и объяснить &quot;что происходит и почему&quot;....

Нужно преобразовать символ строки в тип float
void calc(char*a) {int i,n=strlen(a); float op1,op2,op3; for(i=0;i&lt;n;i++) {if(a&gt;='0' &amp;&amp;...

Динамические массивы
int *X = (int*)malloc((n)*sizeof(int)); //программа работает ровно до объявления динамического...


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

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

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