Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

vampir4eg

Дан бинарный файл с вещественными числами одинарной точности. Вывести в файл значения элементов находящихся между макс и мин элементами причем в обратном порядке. Имя файла вводится в командной строке. Файл сохдать можете сами.
var fin,fout:file of single; i,j,imin,imax:integer; m,max,min:single; s:string; begins:=paramstr(1); if s='' then s:='in'; assign(fin,s); reset(fin);s:=paramstr(2); if s='' then s:='out'; assign(fout,s); rewrite(fout);i:=0; j:=0; imin:=0; imax:=0; read(fin,m); min:=m; max:=m; while not eof(fin) do  begin  inc(i); read(fin,m); if m>max then begin max:=m; imax:=i end;  if m<min then begin min:=m; imin:=i end;  end;writeln;if imax<imin then begin i:=imax; imax:=imin; imin:=i end;for i:=imax-1 downto imin+1 do begin seek(fin,i); read(fin,m); write(fout,m) end;close(fin); close(fout);end.

Имена файлов могут задаваться в командной строе вызова программы. Если не заданы, то используются имена in и out.

Программы для тестирования:

Создание исходного файла:

var fout:file of single; m:single;begin assign(fout, 'in'); rewrite(fout); repeat readln(m); write(fout,m) until m=0; end.

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

Чтение файла результатов:

var fout:file of single; m:single;begin assign(fout, 'in'); reset(fout); while not eof(fout) do begin read(fout,m); write(m:8:2) end;writeln; readln end.

Вторую программу сделаю завтра, а сегодня я пошел спать :)

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

vampir4eg

Дан массив целых чисел. Размер массива и его содержимое вводит пользователь. Отсортировать массив так, чтобы сначала шли положительные числа в порядке убывания, а затем отрицательные числа в порядке возрастания. Вывести в файл элементы отсортированного массива, стоящие на четных местах. Имя файла задается параметром командной строки.
Все сортируем по убыванию, затем часть массива с неположительными числами инвертируем.
var i,j,k,t,n:integer; a:array[1..1000]of integer; so:string; fout:text; begin so:=paramstr(1); if so='' then so:='out.txt'; writeln('n ? '); readln(n); writeln('Enter ',n,' numbers');for i:=1 to n do read(a[i]); readln;for i:=1 to n-1 do for j:=1 to n-i doif a[j]<a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;k:=n; for i:=n downto 1 do if a[i]<=0 then k:=i;for j:=0 to (n-k)div 2 do begin writeln(n-j,' ',k+j); t:=a[n-j]; a[n-j]:=a[k+j]; a[k+j]:=t end;assign(fout, so); rewrite(fout); for i:=1 to n div 2 do write(fout,a[2*i]:8); close(fout);  end.

Имя файла может задаваться в командной строке вызова программы. Если не задано, то используется имя out.txt.

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Привет всем !!!!!!

Прошу прощения что ещё раз прошу помочь, посмотрите пожалуйста мои комментарии к программе(так ли я ее понял)

Ссылка на комментарий
Поделиться на другие сайты

temich5000

int***a; //указатель на указатель на указатель на целое (будет это целое первым в массиве или само по себе - никто пока не знает, да и не важно)       int**tM[2];//массив указателей на указатели на целые       int*M[2*3]; //массив указателей на целые   time_t t;   int i,j,k;       srand( (unsigned) time(&t));       a=&tM[0];//наконец-то указателю присвоили адрес массива tM, теперь он при деле :)       for (i=0; i<2; i++)//инициализация массива указателей на массив указателей           *(a+i)=&M[i*3];//в левой части тут к значению a, то есть адресу начала массива tM в этом указателе, прибавляем размер элемента, на который он ссылается, то бишь переходим к адресу i-го указателя в массиве tM[2], разыменовываем указатель по этому адресу, то есть переходим по адресу в нем на элемент массива tM, и туда заносим адрес элемента массива указателей на целые, каждый раз со сдвигом на 3 по этому массиву; теперь у нас tM[0] содержит адрес нулевого элемента массива указателей на целые, а tM[1] - третьего элемента этого массива       for(int i=0;i<2;i++)//настала пора занять делом пока бездельничающие шесть указателей на целые, которые у нас были созданы одним массивом, но на первую и вторую половину этого массива у нас отдельные указатели, так что это то же, что два отдельных массива, вот мы эти массивы сейчас и переберем по элементам               for (j=0;j<3;j++)                *(*(a+i)+j)=new int [4]; //заняли делом последние из оставшихся у нас указателей, указатели низшего уровня; каждому из них присвоили адрес начала созданного тут же в правой части массива из четырех целых        printf("part 1: \n");        for (i=0;i<2;i++)//инициализация и вывод на экран конечного трехмерного массива        {               for (j=0;j<3;j++)               {                       for (k=0;k<4;k++)                       {                               *(*(*(a+i)+j)+k)=rand()%10; //доступ к i,j,k-ой ячейке по цепочке указателей на начала соответствующих массивов указателей с добавлением к значению в каждом указателя смещения нужного нам указателя от начала массива, на который он указывает                   printf(" %i\t", *(*(*(a+i)+j)+k) );                       }                       printf("\n");               }               printf("\n");        }

Извиняюсь, если слишком подробно, это комментарии для тебя, для преподавателя их можно сократить...

Так, пора закусить... ;) Да, С Новым годом, с новым счастьем! :)

Заметно, что язык C (а мы пока не выходили за его пределы к языку C++) был создан людьми, привыкшими прослеживать в уме длинные логические цепочки. Pascal куда проще, впрочем, и на С можно писать проще, обходясь индексами и обращаясь к указателям в крайних случаях. Но Билл Гейтс не зря считал, что в одной Америке слишком мало умных людей, чтобы заполнить вакансии программистов Microsoft, и набирал программистов со всего мира. Конечно, программисты Microsoft пишут программы куда сложнее.

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте. Помогите решить задачу в Pascal.

Дана непустая последовательность из маленьких латинских букв. Между соседними словами запятая, за последним словом - точка. Напечатать все согласные буквы, которые входят:

a. хотя бы в одно слово;

b. в три слова.

Ссылка на комментарий
Поделиться на другие сайты

motomen

var s,c:string; i,j,k:integer; begin c:='bcdfgklmnpqrstvwxz'; readLn(s); for i:=1 to length© do if pos(c[i],s)>0 then write(c[i]); writeln;for i:=1 to length© do  begin  j:=0; k:=0; repeat inc(j); if c[i]=s[j] then begin inc(k); repeat inc(j) until s[j]<='.' end until s[j]='.'; if k=3 then write(c[i])  end;writeln; readln end

.

"хотя бы в одно слово"="вообще встречается ли во введенной строке"

"в три слова" - для каждой буквы ищем вхождение во введенную строку, если находится, увеличиваем счетчик найденных вхождений на единицу, пропускаем символы до начала следующего слова и ищем дальше. Если в конце строки в счетчике число три, печатаем букву.

Ссылка на комментарий
Поделиться на другие сайты

Помогите решить еще одну задачу. Дан текстовий файл перевернуть четные слова.

Например: до было yellow man word english bit work то после должно стать yellow nam word hsilgne bit krow.

Буду очень благодарен.

Ссылка на комментарий
Поделиться на другие сайты

motomen

var fi,fo:text; c:char; s,p:string; i:integer; b:boolean; begin write('Name of the file? '); readln(p); assign(fi,p); reset(fi); assign(fo,'temp'); rewrite(fo); b:=false;repeatread(fi,c); if c>' ' then s:=s+celse begin    if b then for i:=length(s) downto 1 do write(fo,s[i]) else write(fo,s);    write(fo,' ');  if s<>'' then b:=not b; s:='';    enduntil eof(fi); close(fi); close(fo); erase(fi); rename(fo,p)end.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

motomen

var s,c:string; i,j,k:integer; begin c:='bcdfgklmnpqrstvwxz'; readLn(s); for i:=1 to length© do if pos(c[i],s)>0 then write(c[i]); writeln;for i:=1 to length© do  begin  j:=0; k:=0; repeat inc(j); if c[i]=s[j] then begin inc(k); repeat inc(j) until s[j]<='.' end until s[j]='.'; if k=3 then write(c[i])  end;writeln; readln end

.

"хотя бы в одно слово"="вообще встречается ли во введенной строке"

"в три слова" - для каждой буквы ищем вхождение во введенную строку, если находится, увеличиваем счетчик найденных вхождений на единицу, пропускаем символы до начала следующего слова и ищем дальше. Если в конце строки в счетчике число три, печатаем букву.

Извините что очень много прошу. Пожалуйста сделайте это задание с помощью множеств.

Ссылка на комментарий
Поделиться на другие сайты

motomen

Множества тут нужны как рыбке зонтик. Но можно...

const g=['b'..'d','f'..'h','k'..'n','p'..'t','v'..'x','z']; var p:set of char; a:array['b'..'z']of integer; i:integer; s:string; c:char;beginfor c:='b' to 'z' do a[c]:=0; p:=[]; readln(s);for i:=1 to length(s) do if s[i]<='.' then p:=[]   else if(s[i]in g)and not(s[i]in p)then begin include(p,s[i]); inc(a[s[i]]) end; for c:='b' to 'z' do if a[c]>0 then write©; writeln; for c:='b' to 'z' do if a[c]=3 then write©; writeln; readln end.

P.S. Для препода можно, но на других форумах не следует приводить эту и предыдущую программы как написанные тобой :nono3:

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Помогите люди добрые, напишите, кому не трудно, программу в Access 2003. Задание: создать программу, которая выводит день недели по дате.

Ссылка на комментарий
Поделиться на другие сайты

Толя

Судя по условию, дату надо не текущую, а вводимую. С интеграцией в Access, как и с самой Access, сто лет уже дела не имел, но в VBS как отдельная программа это может выглядеть так:

Set objShell=Wscript.CreateObject("Shell.Application")D1=InputBox("Enter the date!","Date",Date)D2=WeekdayName(Weekday(D1,0))MsgBox(D1&" : "&D2)

Если дать файлу с этим текстом имя вроде DayOfTheWeek.vbs

то его можно запускать автономно.

Ссылка на комментарий
Поделиться на другие сайты

Привет всем !!!

Ребят помогите мне, пожалуйста, сделать эти две работы:

В 1 работе я получил результаты:

2.1) 127 127 2.2) 5131 131.000000 3.1) ошибка на ++ 3.2) 5 2 -128 3.3) 0 0

14012011647.jpg

14012011649.jpg

post-91959-0-68113800-1326572220_thumb.j

post-91959-0-25323500-1326572232_thumb.j

Ссылка на комментарий
Поделиться на другие сайты

temich5000

Тут в основном надо переписывать довольно длинные правила и примеры из учебника.

По первому листку ты уже проверил правильность выражений компилятором, так что осталась беллетристика, по второму листку придумывать самому что-то надо в основном при работе с указателями и динамической памятью, вот соответствующие программы для пунктов 1.1 ... 1.4:

1.

#include <malloc.h>#include <stdio.h>int main(){char *a; a=(char*)malloc(n*sizeof(char)); scanf("%9s",a); printf("%s",a); free(a); getchar(); getchar();}

2.

#include <iostream>int main(){int *a=new int[5]; for(int i=0;i<5;i++)std::cin>>a[i]; for(int i=0;i<5;i++)std::cout<<a[i]<<' '; delete[]a; getchar(); getchar();}

3.

#include <iostream>int main(){ int* (*pM)[2]; int* M[2]; pM=&M;for(int i=0;i<2;i++)M[i]=new int;  for(int i=0;i<2;i++)*(*pM)[i]=i; for(int i=0;i<2;i++)std::cout<<*(*pM)[i]<<std::endl; for(int i=0;i<2;i++)delete (*pM)[i]; std::cin.get();}

4.

#include <iostream>int main(){struct d{char *c; int a,b;}; d *s=new d;  d *r=new d[5]; s->c="abc"; s->a=s->b=123; for(int i=0;i<5;i++){r[i].c="abc"; r[i].a=r[i].b=i;}std::cout<<s->c<<s->a<<s->b<<std::endl; for(int i=0;i<5;i++)std::cout<<r[i].c<<r[i].a<<r[i].b<<std::endl;delete s; delete[]r; std::cin.get();}
Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, помогите, пожалуйста, разобраться с задачей:

Дана матрица размера n x m (n и m ввести с клавиатуры); 1)Сформировать (заполнить матрицу); 2)Все отрицательные элементы на главной диагонали заменить 0; 3)Найти сумму тех строк в матрице, где элемент на главной диагонали положителен; 4)Вывод на экран матрицы.

int main (){

int n,m;

cin>>n

cin>>m

int*a=new int[n][m];//Задаем массив размером n на m

//*******************Заполняем элементы массива***************************

for (int i=o; i<n; i++){

for (int j=0; j<m; j++){

cin>>a[j];

}}

//***************Проверка элементов на главной диагонали*********************

for (int i=0;(i<n)&&(i<m);i++);{

if (a<0);{

a=0;}}

//*************Сумма строк********************

int*arr_sum=new int[n];

for (int i=0;(i<n)&&(i<m); i++){

if (a>0){

int sum=0;

for (int j=0; j<m; j++){

sum+=a[j];

}

arr_sum=sum;

}

}

//***************Вывод матрицы на экран*********************

for (int i=0; i<n; i++){

for (int j=0; j<m; j++){

cout<<a[j];

}

cout<<"\n";

}

for (int i=0; i<n; i++);{

cout<<arr_sum<<"n";

}

return 0;

}

Прошу исправить ошибки в написанном коде,(расписать комментарии к каждой строчке)

и обязательно задать функцию в программе

Ссылка на комментарий
Поделиться на другие сайты

rainbow012

#include<iostream>#include<iomanip>using namespace std;// функция суммирования элементов строкиfloat sum(int k, float b[]){float u=0; for(int j=0;j<k;j++)u+=b[j]; return u;}// главная функцияint main(){// объявления и инициализация переменныхint n,m; float s=0; float a[20][20];  cout<<"n m ? "; cin>>n>>m;// ввод матрицыfor(int i=0;i<n;i++){cout<<"line "<<i+1<<" ? "; for(int j=0;j<m;j++)cin>>a[i][j];} cout<<endl; // суммирование элементов строк с положительными элементами гл. диагонали // и  замена элементов гл. диагонали  на нули в остальных строках for(int i=0;i<(n<m?n:m);i++)if(a[i][i]>0)s+=sum(m,a[i]); else a[i][i]=0;// вывод полученной матрицы на экранfor(int i=0;i<n;i++){for(int j=0;j<m;j++)cout<<setw(10)<<a[i][j]; cout<<endl;}// вывод на экран суммы элементов строкcout<<endl<<"s="<<s<<endl; cin.get(); cin.get();}

Функция для одноразового использования программе не нужна, с ней только длиннее и сложнее, но, раз просят - сделано. Динамический массив никто использовать не просил, поэтому я использовал статический. Сумму строк я понял как сумму их элементов.

По запросу вводится размер матрицы, затем по запросам значения элементов строк (для каждой строки можно вводить элементы в одну строку, разделяя их пробелами).

P.S. Извиняюсь, вместо sum(m,a) сначала написал sum(n,a), сейчас исправлено.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Привет всем !!!

Ребят помогите мне, пожалуйста, сделать программу на си или pascal

Разработать программу, которая должна выполнять следующие действия:

разбиение отрезка [0,1) на m равных частей;

n вызовов функции rundum и вычисление относительных частот попадания получаемых псевдослучайных чисел в соответствующую часть интервала;

вывод таблицы, состоящей из m строк и трех колонок: № части интервала, длина соответствующего отрезка, относительная частота попадания псевдослучайных чисел.

Ссылка на комментарий
Поделиться на другие сайты

temich5000

var i,m,n:longint; p:array[0..100]of longint;begin write('m n ? '); readln(m,n); writeln; randomize;for i:=1 to n do inc(p[trunc(m*random)]);writeln('   #     L          p');for i:=1 to m do writeln(i:4,1/m:11:6,p[i-1]/n:12:7);readln end.

Вообще-то длина каждого отрезка равна 1/m :), все длины отрезков одинаковы, можно было бы и не писать в таблицу.

Программа рассчитана на m до 100, n до двух миллиардов, но больше десяти миллионов считать будет довольно долго.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

1. Через указатели на указатели посчитать сумму двух чисел и записать в третье.

2. Написать примитивный калькулятор, пользуясь только указателями.

3. Найти факториал числа, пользуясь только указателями.

4. Найти заданную степень числа, пользуясь только указателями.

5. Произвести, используя указатель на указатель проверку на нуль при делении

Прошу объяснить, зачем здесь нужны указатели, на что они должны указывать и неужели оптимальным будет решение через указатели???

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...