Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 895
от 03.11.2007, 05:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 478, Экспертов: 67
В номере:Вопросов: 6, Ответов: 16


Вопрос № 107113: Здраствуйте, Уважаемые Эксперты. У меня возникла следующая проблема. Функция в моей программе по-символьно читает файл Generate.exe. Проблема в том, что примерно в начале файла стоит символ 'я', код - 255. и программа естественно считыван...
Вопрос № 107118: Здравствуйте Уважаемые. Помагите режит задачу...
Вопрос № 107132: Добрый день всем! Помогите пожалуйста в С++ я не силен....мне задали задачу в инстиуте не могу никак решить....Надо создать массив и найти,какое значение встерчается в данном массиве наибольшее число раз. Заранее благодорю...и извините за глу...
Вопрос № 107145: Здравствуйте! Помогите пожалуста сделать Лабу по програмированию! Найти, какое значение встречается в данном массив наибольшее число раз. Знаю только начало #include<stdio.h> main() int ............. и тд помогите по...
Вопрос № 107162: Здравствуйте! Никак не могу победить массивы :( вроде делаю ерунду: float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}}; int n=3; int N=6; float a[]={0,0,0,0,0}; float b[]={6,6,6,6,6}; in...
Вопрос № 107189: в консоли вывожу массив, оказывается там все нули. Как так может быть? #include <iostream.h> #include <stdio.h> #include <conio.h> #pragma hdrstop //----------------------------------------------------------...

Вопрос № 107.113
Здраствуйте, Уважаемые Эксперты.
У меня возникла следующая проблема.
Функция в моей программе по-символьно читает файл Generate.exe.
Проблема в том, что примерно в начале файла стоит символ 'я', код - 255. и программа естественно считывание прекращает.
Вопрос: как мне изменить функцию так чтобы считывание происходило до конца файла?
Заранее спасибо.

Приложение:

Отправлен: 28.10.2007, 14:47
Вопрос задал: MARTALEX (статус: 4-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: CruelHity
Здравствуйте, MARTALEX!
попробуйте так
while( !feof( f1 ) )
{
считывания
}
....

См в прилодени пример функции feof

Приложение:

Ответ отправил: CruelHity (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 14:54
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: Mihail Yarlykov
Здравствуйте, MARTALEX!
Держите изменённую функцию.
И замечу, что simvol нужно делать беззнаковым т.е. тип unsigned char , что бы значения кодов символов были в пределах ( 0 .. 255 ), а не ( -128 .. 127 ) !

Приложение:

---------
Нет ничего невозможного!

Ответ отправил: Mihail Yarlykov (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 15:02
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за помощь. Спасибо за "unsigned char", а то мне действительно попадались отрицательные числа.
Пришлось правда понервничать - при попытке скопировать вашу функцию компилятор выдавал 13 ошибок. Удалял эту функцию ни чего не помогало. Набор ручками помог.
Спасибо.

Отвечает: Aristos
Здравствуйте, MARTALEX!

Прежде всего, необходимо открыть файл как бинарный, задав режим открытия файла "rb" (в функции fopen). Теперь необходимо определить размер файла, и определять конец файла не по символу EOF, а по количеству считанных байт. И при чтении пользоваться функцией fread.
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
Считывает из файла stream в буфер buffer количество байт равное size*count.

В приложении пример такой функции.

Приложение:

---------
нет ничего невозможного

Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 28.10.2007, 16:40
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за помощь. Этот вариант ответа оличается от других. Вы предложили свой подход к решению сложившейся проблемы, за что я вам и благодарен.

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, MARTALEX!

Правильный ответ Вам дал только CruelHity.
Использование unsigned char не поможет.
Использование счётчика - это хак, который не решает проблемы.
Рассмотрим в чём проблема Вашей программы.
Функция fgetc() возвращает не char, а int. Когда она прочиатет Ваш код, она вернёт 0x000000FF, а когда она вернёт EOF она вернёт 0xFFFFFFFF.
Если бы ваш simvol был описан как int, то проблем у Вас бы не было. Но поскольку Ваша программа преобразует int->char, то возникает проблема и коды 0xFFFFFFFF и 0x000000FF превращаются в 0x000000FF.
При сравнении с int EOF ваш char будет расширен до int.
Если вы использовали signed char, как в вашей программе, то 0xFF будет расширен до 0xFFFFFFFF и даст ложное срабатывание при сравнении с EOF, что Вы и наблюдаете.
Если вы использовали unsigned то оба кода останутся 0x000000FF и хотя чтение 0xFF из файла не будет теперь прекращать цикл, но и возврат EOF тоже не прекратит его.
Таким образом, правильных действий 2:
1. лучше всего использовать !feof() как предлагал CruelHity
2. поменять тип simvol на int в соответствии с возвращаемым значением fgetc()
Ответ отправил: Воробьёв Алексей Викторович (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 19:30
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ. но вынужден с вами не согласиться.
Файл Generate.exe имеет размер 106583 байт. По приблежённым вычислением получается что сумма всех символов приблежается к 27285248. Функцию который предложил CruelHity показало что сумма получилась равной 86170. Функция еоторая была дана другим отвтчиком показала сумму 12869468.
По этому я считаю, что второй вариан более правильный.


Вопрос № 107.118
Здравствуйте Уважаемые. Помагите режит задачу

Приложение:

Отправлен: 28.10.2007, 15:12
Вопрос задал: Muhammedov Abdurohman (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Muhammedov Abdurohman!

Вот код, он компилируется под Visual Studio .NEt 2003, но я его не отлаживал.

Приложение:

Ответ отправил: Воробьёв Алексей Викторович (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 21:10
Оценка за ответ: 5


Вопрос № 107.132
Добрый день всем!
Помогите пожалуйста в С++ я не силен....мне задали задачу в инстиуте не могу никак решить....Надо создать массив и найти,какое значение встерчается в данном массиве наибольшее число раз.
Заранее благодорю...и извините за глупый такой вопрос((институт((
Отправлен: 28.10.2007, 16:40
Вопрос задал: D11
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Mihail Yarlykov
Здравствуйте, D11!
Вот програмка к вашей задаче. Как создавать массив не сказано поэтому создаётся заполнением случайными числами:

Приложение:

---------
Нет ничего невозможного!

Ответ отправил: Mihail Yarlykov (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 17:21

Отвечает: CruelHity
Здравствуйте, D11!
Вот еще такой вариант проги!см приложения!

Приложение:

Ответ отправил: CruelHity (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 18:51


Вопрос № 107.145
Здравствуйте! Помогите пожалуста сделать Лабу по програмированию!
Найти, какое значение встречается в данном массив наибольшее число раз.
Знаю только начало
#include<stdio.h>
main()
int ............. и тд
помогите пожалусто кому не трудно.
Отправлен: 28.10.2007, 18:20
Вопрос задал: Pimp (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: CruelHity
Здравствуйте, Pimp!
до вас уже Только что спрашивали!!!
видно вы с одной группы))))
Прогу см в приложении!
Изменяйте массив! Если надо изменяйте массив и способ ввода!

Приложение:

Ответ отправил: CruelHity (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 18:54
Оценка за ответ: 5
Комментарий оценки:
Спасиб за помощь но образец который нам давал препад совсем не похож ни на один из ответов не всеравно спс! если интересно чем отличается то скажу коротко он намного проще! там строчек 10 всего


Вопрос № 107.162
Здравствуйте! Никак не могу победить массивы :(
вроде делаю ерунду:
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
int n=3;
int N=6;
float a[]={0,0,0,0,0};
float b[]={6,6,6,6,6};
int mxr[3][6];
for (int i=0; i<N; i++) {
for (int r=0; r<n; r++) {
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]) {mxr[r][i]=0;}
else {mxr[r][i]=1;}
}
}
весь массив mxr[r][i] заполняется правильно, кроме первого значения mxr[0][0] оно равно и ни нулю и ни единице, а равно 6077552 вот так :)
отчего это происзодит?
Отправлен: 28.10.2007, 20:29
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: kool
Здравствуйте, Mart!
Условие
xr[0][0]>=a[0] && xr[0][0]<=b[0]
никогда не выполняется. А поскольку
mxr не был инициирован, то там остался мусор.
Так что либо инициализируйте mxr либо смотрите чтобы
все условия выполнялись.
Удачи!


---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 28.10.2007, 20:57

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Mart!

Код, который Вы прислал правильно прописывает mxr[0][0] = 0 под Visual Studio .NEt 2003. Может, ошибка при выводе значений?
Ответ отправил: Воробьёв Алексей Викторович (статус: 3-ий класс)
Ответ отправлен: 28.10.2007, 21:20
Оценка за ответ: 5

Отвечает: Виктор Пырлик
Здравствуйте, Mart!

Проверил ваш код, вот, в приложении немного подправленый - как тест, консольное приложение.
Суть там - в инициализации переменных, ну и.. немного косметики, ибо стараться надо писать всетаки "правильно" :)

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Практикант)
Ответ отправлен: 28.10.2007, 21:40
Оценка за ответ: 5


Вопрос № 107.189
в консоли вывожу массив, оказывается там все нули. Как так может быть?
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
int N=6;
int n=5;
for (int i=0; i<N; i++) {
for (int r=0; r<n; r++) {
printf("xr[%i][%i] = %i ",r,i, xr[r][i]);
}
}

getch();
return 0;
}
Отправлен: 29.10.2007, 01:49
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: SiRuS
Здравствуйте, Mart!
У вас неправильный формат вывода. Вы пытаетесь вывести третью переменную как целочисленную. А надо как вещественную

Приложение:

Ответ отправил: SiRuS (статус: 2-ой класс)
Ответ отправлен: 29.10.2007, 02:18
Оценка за ответ: 5

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Mart!

Потому что вы выводите их как int. а они float. В строке формата должно быть "xr[%i][%i] = %f "
Ответ отправил: Воробьёв Алексей Викторович (статус: 3-ий класс)
Ответ отправлен: 29.10.2007, 02:20
Оценка за ответ: 5

Отвечает: CruelHity
Здравствуйте, Mart!
%i - это для целых чисел!
%f - это для вещественых!
измените функцию printf на:
printf("xr[%i][%i] = %f ",r,i, xr[r][i]);
или измените тип массива на int! так как у вас и так все значения целые!

См примеры различных форматов в приложении

Приложение:

Ответ отправил: CruelHity (статус: 3-ий класс)
Ответ отправлен: 29.10.2007, 12:59

Отвечает: Djec
Здравствуйте, Mart!
Видите ли, у Вас описан вещественный массив, а при выводе Вы указываете тип преобразования как целый. Либо опишите массив как int, либо исправьте строчку с выводом след. образом:
printf("xr[%i][%i] = %f ",r,i, xr[r][i]);
Здесь полседний тип преобразования %i заменяется на %f.
---------
Никогда не сдавайся, даже если боишься проиграть
Ответ отправил: Djec (статус: 3-ий класс)
Ответ отправлен: 29.10.2007, 18:33

Отвечает: Артём1983
Здравствуйте, Mart!
С кодом у Вас почти всё нормально.Просто Вы немного переусердствовали. На мой скромный взгляд совершенно не нужны строки
int N=6;
int n=5;
Так же я использовал фунцию cout
Смотрике код в приложении.

Приложение:

---------
Программирование - дело Путное!

Ответ отправил: Артём1983 (статус: 5-ый класс)
Ответ отправлен: 29.10.2007, 22:32


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное