Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Сравнение массивов


Автор: Baltazar5000 15.2.2007, 22:59
Требования:
1)Создать функцию "Вычитать массив из файла" и сохранить её в отдельном файле с расширением *.h

Пример библиотеки "вычитать массив из файла"(А какой он будет у меня?).
Код

int read_mas(int list[], int size)
{
    int i;FILE*f;
    char*ch="fil_mas.dat";
    if ((f=fopen(ch,"r"))==NULL)
    {
        fprintf(stderr,"Не удается открыть файл...\n");
        return 1;
    }
    for(i=0;i<size;i++)
    {
        fscanf(f,"%d", &list[i]);
    }fclose(f);
}


2)Обращения к функциям осуществлять из тела функции main()

ЗАДАНИЕ:
Создать программу - pr20.cpp
1)Вычитывающую из файла pr19.dat(смотрите ниже) значения элементов массива.
2)Выводящую на экран:
  -Значения элементов из pr19.dat
  -Числа из массива для которых a итое >= i


Вот pr19.cpp

WIND.h - Окно
Код

Wind(int x1, int y1, int x2, int y2, int z1, int z2)
    {    // построение тени цветом z1
        window(x1, y1, x2, y2);textbackground(z1); clrscr();
        // построениеокна для вывода значений цветом z2
        window(x1 - 2, y1 - 1, x2 - 2, y2 - 1);textbackground(z2); clrscr();
        return 0;
    }


pr19_i.h - Инициализация
Код

void setrandom(int h[], int size)
{
    int i;
    for(i=0;i<size;i++)
    h[i] = random(70)+20;
}


pr19_v.h - вывод на экран
Код

void get_mas(int h[], int size)
    {
        int i;
        for(i = 0; i < size; i++)
        {
            if(i%9==0)
            printf("\n   ");
            printf("%7d", h[i]);
        }
        printf("\n\n");
    }


pr19_p.h - вывод в файл
Код

int fil_mas(int h[], int size)
{
    int i;
    char*ch="../dat/pr19.dat";
    FILE*f;
    if((f=fopen(ch,"w"))==NULL)
    {
        fprintf(stderr,"Ошибка! Не удается открыть файл..\n");
        return 1;
    }
for(i=0;i<size;i++)
{
    fprintf(f,"%d\n", h[i]);
}
fclose(f);
return 0;
}

pr19.cpp - А вот и само задание.
Код

#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
// Подключение функций собственной библиотеки
#include"..\\h\\WIND.h"
#include"..\\h\\pr19_i.h" //Инициализация
#include"..\\h\\pr19_v.h" //Вывод на экран
#include"..\\h\\pr19_p.h" //Вывод в файл
int k;
int main()
{
    textmode(3);
    window(1,1,80,25);
    textattr(15 + (7 << 4));
    clrscr();
    Wind(1,1,80,25,0,9);
    Wind(15,3,65,6,8,3);
    gotoxy(12,2);
    cputs("Исходный массив");
    Wind(5,10,70,20,2,6);

    const int N=32;
    int h[N];randomize();

    k=32;
    setrandom(h,N);
    get_mas(h,N);
    fil_mas(h,N);


    getch();
    return 0;
}




Автор: V.A.KeRneL 16.2.2007, 00:35
Цитата(Baltazar5000 @  15.2.2007, 22:59 Найти цитируемый пост)

Создать функцию ... и сохранить её в отдельном файле с расширением *.h

Преподу твоему надо руки оторвать! Хидер-файлы не для этого!!

Цитата(Baltazar5000 @  15.2.2007, 22:59 Найти цитируемый пост)

Пример библиотеки "вычитать массив из файла"(А какой он будет у меня?).

А чем текущий вариант не устраивает?

Эх, удивительно, такой большой пост, а я так и не понял толком, что требуется... smile 
2 функции что ли, которые выводят это: 
Цитата(Baltazar5000 @  15.2.2007, 22:59 Найти цитируемый пост)

  -Значения элементов из pr19.dat
  -Числа из массива для которых a итое >= i

?

Если угадал, то: 
Код

#include <stdio.h>      /* for scanf(), printf(), puts(), putchar() */
#include <sys/types.h>  /* for size_t and ssize_t */

/* ========================   Printing of arrays   ======================== */

/* 
   Prints an array.
 */
void 
print_array(const int *arr, size_t nelem) 
{ 
    int i;  /* index, counter */
    
    putchar('[');
    if (nelem > 0) 
        printf("%d", arr[0]);
    for (i = 1; i < nelem; ++i) 
        printf(", %d", arr[i]);
    putchar(']');
    putchar('\n');
}  /* print_array() */

/* 
   Печатает [QUOTE]Числа из массива для которых a итое >= i[/QUOTE]
 */
void 
print_array_ai_ge_i(const int *arr, size_t nelem) 
{ 
    int i;  /* index, counter */
    int has_one = 0;  /* Есть ли хоть один элемент.  Если да, то можно печатать запятые.  */
    
    putchar('[');
    if (nelem > 0) 
        if (arr[0] >= 0) { 
            printf("%d", arr[0]);
            has_one = 1;
        }
    for (i = 1; i < nelem; ++i) 
        if (arr[i] >= i) { 
            if (has_one) { 
                putchar(',');
                putchar(' ');
            }
            printf("%d", arr[i]);
            has_one = 1;
        }
    putchar(']');
    putchar('\n');
}  /* print_array_ai_ge_i() */

/* ======================================================================== */


Автор: Syberex 16.2.2007, 10:45
Код

//открытие файла в массив 
unsigned char*  FileOpenToMass(char* Path)
  {
     int handle=open(Path,O_CREAT);
     unsigned long LenFile=filelength(handle);
     close (handle);
     fstream in(Path,ios_base::in |ios_base::binary);
     char *pointer=new char[LenFile];
     in.read(pointer,LenFile);
     in.close();
     //delete []  pointer;
     return  pointer;
  }

/запись в файл
void FileRecord(char* Path,char* first, char* last)
{
fstream in(Path,ios_base::out |ios_base::binary); 
in.write(first,last-first);
in.close();
};



считывание и запись массива

Автор: V.A.KeRneL 16.2.2007, 12:14
Syberex, я думаю, для него настолько «приплюснутый» Си будет шоком. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)