Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/258: Рейтинг темы: голосов - 258, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 01.10.2008
Сообщений: 30
1

Ввод\вывод массива через функции

30.06.2009, 15:21. Показов 48142. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите плз исправить) Нужно осуществить ввод\вывод массива
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
#include "stdio.h"
#include "conio.h"
 
#define N 10
#define M 10
void output (int n, int m,float a [N][M]);
void input (int n, int m, float a [N][M]);
//void sort (int n, int m, float b [], float *S);
int main()
{
    float a[N][M], S, S1;
    int i,j, n, m;
    scanf_s("%d %d", &n, &m);
    printf("vvod");
    input(n, m, a);
    printf("vivod");
    output(n, m, a);
    _getch();
}
 
void input (int n, int m, float a[N][M])
{
    int i, j;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
    
        scanf_s("%f", &a[i][j]);
        
    
}
void output (int n, int m,float a[N][M])
{
    int i, j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            printf("a[%d %d]= %f",i+1, j+1, a[i,j]);
        printf("\n");
    }
}
На выводе нули((
Ошибка как я понимаю во вводе. Как правильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2009, 15:21
Ответы с готовыми решениями:

Ввод/вывод массива через функции
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define n 5 #define m 6 int main() { int i,j; ...

Ввод и вывод массива через функцию
Здраствуйте, написал программу для ввода/вывода массива с заданным количеством елементов, но не...

Матрицы: переделать код, чтобы он работал через три функции - ввод, вычисление и вывод
Здравствуйте, прошу помочь с изменением кода на языке си. Нужно переделать код, так, чтобы он...

Реализовать через отдельные функции ввод динамического массива и нахождение его минимального элемента
Добрый день, необходимо реализовать через отдельные функции ввод динамического массива и нахождение...

17
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
30.06.2009, 15:46 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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
#define N 2
#define M 2
void output (float a [N][M]);
void input (float a [N][M]);
//void sort (int n, int m, float b [], float *S);
int main()
{
        float a[N][M];
        printf("vvedite massiv\n");
        input(a);
        printf("massiv:\n");
        output(a);
        _getch();
}
 
void input (float a[N][M])
{
        for(int i=0;i<N;i++)
                for(int j=0;j<M;j++)
                    cin>>a[i][j];
        printf("\n");       
}
void output (float a[N][M])
{
        for(int i=0;i<N;i++)
        {
                for(int j=0;j<M;j++)
                       cout<<a[i][j]<<" ";
                printf("\n");
        }
}
1
0 / 0 / 0
Регистрация: 01.10.2008
Сообщений: 30
30.06.2009, 16:07  [ТС] 3
Спасибо, но не много не так) Необходимо сделать выбор размера массива до 10х10. Нас за это дерут) для этого используются m,n

З.Ы. Нашел ошибку)
printf("a[%d %d]= %f",i+1, j+1, a[i,j])
0
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
30.06.2009, 20:01 4
Ну я и сделал N*M. Ты же взял их в define. Зачем брать лишние переменные,если они уже есть)
0
0 / 0 / 0
Регистрация: 01.10.2008
Сообщений: 30
30.06.2009, 23:03  [ТС] 5
Ну а без N u M не будет массив инициализироваться) а n u m используются уже в самой проге. хз нам препод так показывал..
0
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
30.06.2009, 23:04 6
Да я понял о чем ты говориш)))
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
30.06.2009, 23:13 7
вот эту функцию -
C
1
void output (float a[N][M])
завалить можно так:

C
1
2
float arr[1][M];
output(arr);
(:
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
01.07.2009, 00:24 8
А потому что матрицы нужно делать нормально.
C
1
double **arr;
И никаких констант - M-ы,N-ы.
0
0 / 0 / 0
Регистрация: 01.10.2008
Сообщений: 30
01.07.2009, 02:54  [ТС] 9
Цитата Сообщение от odip Посмотреть сообщение
А потому что матрицы нужно делать нормально.
double **arr;

И никаких констант - M-ы,N-ы.
хм.. не понял) можно подробней?)
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
01.07.2009, 10:36 10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdlib.h>
 
 
void func( void ) {
 
#define M 10
#define N 20
 
double **arr= NULL;
int i, j;
 
arr= malloc( M*sizeof(double*) );
for ( i= 0; i<M; i++ ) {
    arr[i]= malloc( N*sizeof(double) );
}
 
for ( i= 0; i<M; i++ ) {
    for ( j= 0; j<N; j++ ) {
        arr[i][j]= 0.0;
    }
}
 
}
0
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
05.07.2009, 07:35 11
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <cmath>
#include <iomanip>
#include <limits.h>
#include <conio.h>
 
using namespace std;
 
const int N=10,A=-10,B=20;
int i;
 
template <class T>void формирование(T x[],int n=N,int a=A,int b=B);
template <class B>void вывод(B x[],int n=N);
 
int _tmain(int argc, _TCHAR* argv[]){
 
    SetConsoleOutputCP(1251);
    srand(GetTickCount());  
    int a[N];
    double d[N];
    формирование(a);
    cout<<"\n\tМассив a:\n";
    i = 0;
    вывод(a);
    cout<<"\n\n";
    формирование(d);
    cout<<"\tМассив d:\n";
    i = 0;
    вывод(d);
    cout<<"\n\n";
    return 0;
}
 
 
template <class T>void формирование(T x[],int n,int a,int b){
    int i;
    for(i=0;i<n;i++){
        if(sizeof(T)==4)
            x[i]=a+rand()%(b-a+1);
        else
            x[i] = double (a+rand()%(b-a+1))/1.1;
    }//for
}
 
template <class B>void вывод(B x[],int n){//рекурсивная функция 
    if(i<n){
        cout<<setw(12)<<x[i];
        if((i+1)%5 == 0)cout<<"\n";
        i++;
        вывод(x);  
    }   
    //return;
}
0
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 30
05.07.2009, 13:04 12
Можно вопросик?Разве не лучше вместо #define использовать const? Это суть задачи не меняет,просто эта директива устарела....
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
05.07.2009, 13:33 13
define устарело ?
Очень смешно ))))))
0
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 30
05.07.2009, 13:55 14
Чего смешно?Совсем не смешно!!!!
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
05.07.2009, 14:07 15
Открой любой системный h-файл и посмотри есть ли там define-ы.
Потом смейся.
0
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 30
05.07.2009, 14:09 16
Так я ж не говорю,что его нельзя использовать....Просто он уже устарел...
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
05.07.2009, 14:13 17
Хорошо, компнем глубже.
Что с точки зрения программиста значит "устарел" в твоем понимании ?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.07.2009, 05:30 18
Цитата Сообщение от Юляшка
Разве не лучше вместо #define использовать const?
чем больше переменных в глобалке, тем хуже для программы
define даёт возможность убрать его в любой момент, так как он нужен только для мнгновенной замены всех значений
то есть, иными словами, он никак не регистрируется в программе, его как бы нет

глобальная переменная: на первых порах это не видно, но сначала от неё начинает зависеть одна маленькая функция, потом на ней строится большая, потом ещё больше
в результате ты имеешь огромную функцию, а в С++ там вообще классы, которая так плотно зависит от этой переменной в глобалке, что при переносе этого класса тебе приходится таскать за ним эту переменную, потому что переделывать всё просто лень, а без него уже никуда
потом у тебя появляются два три класса, каждый работает с массивами и структурами, в каждой структуре указатель, а почему указатель ? да потому что, если сделать массив, нужно будет ещё одну прилипалу делать, а её, как известно, ничем уже не вытащишь потом, потому что без неё никак, а место для неё одно - тама, где будет видно её в области видимости
ну, вот и прикинь, тебе константу для размера массива нужно будет объявлять в protected: оно тебе надо ? а убрать захочешь что делать будешь ?

ты объявляешь десять констант: A B C D E ...
и все они равны 100
и тебе пофигу, они всё равно неважные, просто на их места установится сотка и такой код пойдёт на компиляцию, у них минус такой, что их нельзя проверить в процессе компиляции, то есть ты не можешь встроить средство для контроля размера массива (типа, а правильный размер у массива, а подходит ли он для дальнейшего ?), то есть, что вставится - то вставится

define работает по всему файлу, его можно определить внутри какой-нибудь функции и он будет работать в другой, его можно перенести из неё наружу и он не меняет своих свойств, потому что его область видимости - файл
не нужно следить а не насоздавалось ли там много дефайнов, потому что это неважно, он не будет зашит в программу, лишние дефайны просто скинутся перед компиляцией

дефайны можно передефайнить, я даже не знаю, в чём было бы преимущество const int, если бы в #define добавили опцию const, может только если бы было #define FVALUE 2.2 можно было бы однозначнее задать размер для 2.2, но его и так задать можно через суффикс #define FVALUE 2.2f

а сам define можно по-разному применять
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
#define LOOP  { int i; for (i = 0; i < 5; i++) printf("Number %d\n", i+1); }
 
main()
{
    LOOP
    return 0;
}
0
06.07.2009, 05:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2009, 05:30
Помогаю со студенческими работами здесь

Определение и вывод номеров минимальных элементов двумерного массива и ввод массива меньшей размерности
Доброго времени суток. Пожалуйста, помогите с решением задания. Заранее спасибо. Исходная...

Ввод/вывод данных элементов структуры через функцию
Разработать программу учета покупок ювелирного магазина. Данные о покупках хранить в виде массива...

Ввод-вывод двумерного массива
Задание- нужно ввести двумерный массив, записать в него строки заданного с консоли количества....

Ввод и вывод одномерного массива
Объясните, пожалуйста, почему мой вариант не верен: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru