Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2009, 16:54   #1
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию Помогите,пожалуйста,переделать программу.

Здравствуйте!Помогите,пожалуйста,пе реписать программу.Нужно использовать fscanf,FILE *in = fopen (“input.txt”, “r”),
FILE *out = fopen (“output.txt”, “w”).
В этом коде:

Код:
#include <stdio.h>
#include <fstream>
#include <cstring>

using namespace std;

int main ()
{
  int n,k;
  int i,j,ind;
  char fam[100][20];
  char tmp[20];
  float x[100];
  float t,max;
  char lett;

  ifstream fin;    //файловый поток ввода
  ofstream fout;    //файловый поток вывода

  printf ("N: ");   //число студентов
  scanf ("%d",&n);
  printf ("k: ");   //число выводимых лучших
  scanf ("%d",&k);
  printf("\n");

  fin.open("in.txt");
  fout.open("out.txt");

  for (i = 0; i < n; i++) {    //считываем фамилии студентов и оценки
	fin >> fam[i];
	fin >> x[i];
	printf("%s - %.0f\n",fam[i],x[i]);
  }

  //отсортируем первые k наибольших оценок методом простого выбора
  for (j=0; j < k; j++) {
	max = x[j];
	for (i = j + 1; i < n; i++) {  //ищем больший элемент списка
		if (x[i] > max){
			max = x[i];
			ind = i;
		}
	//перемещаем больший элемент в начало списка
	t = x[j];
	x[j] = x[ind];
	x[ind] = t;
	//перемещаем строки
	strcpy(tmp,fam[j]);
	strcpy(fam[j],fam[ind]);
	strcpy(fam[ind],tmp);
	}
  }

  printf("\nResult: \n\n");
  for (i = 0; i < k; i++) {    //выводим список
	printf("%s - %.0f\n",fam[i],x[i]);       //на экран
	fout << fam[i] << " - " << x[i] << endl;   //в файл
  }

  fin.close();
  fout.close();

  printf ("\nEnter a letter to end the program\n");
  scanf ("%s",&lett);

  return 0;
}

Последний раз редактировалось Sazary; 17.10.2009 в 17:54.
vep вне форума Ответить с цитированием
Старый 17.10.2009, 17:59   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

FILE *fin;

вместо
fin.open("in.txt");
пишите
Код:
fin = fopen("in.txt","r");
fout = fopen("out.txt","w");
Вместо
fin >> x[i];
Код:
fscanf("%f",&x[i]);
Вместо
Код:
fout << fam[i] << " - " << x[i] << endl;   //в файл
также, как и в printf:
Код:
fprintf(fout,"%s - %.0f\n",fam[i],x[i]);
Ну и fin.close() превращается в fclose(fin);

Остальное по аналогии.
http://www.cplusplus.com/reference/c...cstdio/fscanf/
http://www.cplusplus.com/reference/c...stdio/fprintf/
http://www.cplusplus.com/reference/c.../cstdio/fopen/
http://www.cplusplus.com/reference/c...cstdio/fclose/
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.10.2009, 18:05   #3
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию

Большое спасибо!Кажется,разобрался.
vep вне форума Ответить с цитированием
Старый 17.10.2009, 21:35   #4
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию

Разобрался,но не работает
Вот код:

Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <fstream>
#include <cstring>



int main ()
{
  int n,k;
  int i,j,ind;
  char fam[100][20];
  char tmp[20];
  float x[100];
  float t,max;

  

  printf ("N: ");   //число студентов - в файле подготовлено 10
  scanf ("%d",&n);
  printf ("k: ");   //число выводимых лучших
  scanf ("%d",&k);
  printf("\n");


  FILE *in = fopen ("in.txt", "r");
  FILE *out = fopen ("out.txt", "w");

  for (i = 0; i < n; i++) {    //считываем фамилии студентов и оценки

	fscanf("%s",&fam[i]);
    fscanf("%f",&x[i]);
	printf("%s - %.0f\n",fam[i],x[i]);
  }

  //отсортируем первые k наибольших оценок методом простого выбора
  for (j=0; j < k; j++) {
	max = x[j];
	for (i = j + 1; i < n; i++) {  //ищем больший элемент списка
		if (x[i] > max){
			max = x[i];
			ind = i;
		}
	//перемещаем больший элемент в начало списка
	t = x[j];
	x[j] = x[ind];
	x[ind] = t;
	//перемещаем строки
	strcpy(tmp,fam[j]);
	strcpy(fam[j],fam[ind]);
	strcpy(fam[ind],tmp);
	}
  }

  printf("\nResult: \n\n");
  for (i = 0; i < k; i++) {    //выводим список
	printf("%s - %.0f\n",fam[i],x[i]);       //на экран
	fprintf(fout,"%s - %.0f\n",fam[i],x[i]);//запись в файл
  }

  fclose(in);
  fclose(out);

  getch();
  
}

Последний раз редактировалось Sazary; 19.10.2009 в 00:29.
vep вне форума Ответить с цитированием
Старый 17.10.2009, 21:48   #5
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию

Microsoft Visual C++ 2008 Express Edition выдает такие ошибки:

Ошибка 7 error C2065: fout: необъявленный идентификатор
Ошибка 6 error C2664: fscanf: невозможно преобразовать параметр 1 из 'const char [3]' в 'FILE *'
Ошибка 5 error C2664: fscanf: невозможно преобразовать параметр 1 из 'const char [3]' в 'FILE *'
vep вне форума Ответить с цитированием
Старый 19.10.2009, 00:35   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Торопился и допустил пару ошибок. Вы могли бы их и сами исправить. Для этого не нужно никаких специфических знаний.
Достаточно пройти по ссылкам, которые я вам дал.
Поставьте везде что-то одно - либо fout, либо out. Написано же: "необъявленный идентификатор".
И в fscanf первым параметром укажите этот идентификатор (fout или out).
Например:
Код:
fscanf(fout,"%f",&x[i]);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите переделать программу на VS C++ Many man Помощь студентам 1 16.10.2009 19:26
Помогите переделать программу. Valentin49 Помощь студентам 1 26.03.2009 13:58
Помогите переделать программу немного. texcel Общие вопросы C/C++ 1 16.02.2009 19:42
Помогите переделать программу в Delphi7… Лисичкина Помощь студентам 1 31.10.2008 19:08
ПОМОГИТЕ ПЕРЕДЕЛАТЬ ПРОГРАММУ ИЗ PASCAL В DELPHI Solny6ko YasnoE Помощь студентам 11 11.08.2007 15:24