[C] lokaty bankowe i nie tylko

0

Dzis zrobilem kolejna porcje zadan, co do 2 rozwiazan nie jestem pewien, a do ostatniego zadania nie mam pomyslu...

  1. Ewa inwestuje 100zł, co roku otrzymuje gratis 10zł. Kasia inwestuje 100zł i co roku otrzymuje 5% od kwoty, która jest aktualnie na koncie. Napisz program, ktory oblicza po ilu latach wartosc inwestycji Kasi przekroczy inwestycje Ewy oraz wyswietli obie wartosci w tym momencie.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    
    int n;
    double ewa, kasia;
    
    printf("    Kasia    Ewa \n");
    
    for(ewa=100, kasia=100, n=0; ewa>=kasia; ewa=ewa+10, kasia=kasia+0.05*kasia, n++)
    {
                 printf("%2.5f,  %3.5f \n\n", kasia, ewa);
                 }
  
  printf("przekroczy po: %d latach\n", n);
  printf("%2.5f,  %3.5f \n\n", kasia, ewa);
  
  
  system("PAUSE");	
  return 0;
}
  1. Jim wygrał milion $, ulokowal je na oprocentaowaniu 8% rocznie. Co rok Jim wybiera 100000$. Ile lat uplynie, zanim Jim calkowicie oprozni konto.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    
    
    int i= 1000000;
    int j,k, c;
    
    for(j=0; i>=0; j++, i=(i+0.08*i)-100000){
             
             printf("Po %d roku, Jim ma: %d dolarow\n\n", j,i);
             }
  
  printf("Jim oprozni konto po %d roku, \n"
          "Jim bedzie mial wtedy debet wynoszacy: %d dolarow\n\n", j,i);
  
  system("PAUSE");	
  return 0;
}

Te zadania sa chyba ok, chodzi mi po prostu o opinie czy to jest w miare dobrze zoptymalizowane, czy wyglada przyzwoicie itp... a moze powoduje usmiech na twarzy prawdziwego programisty :D

  1. tu mam problem, zastosowalbym tablice, ale tu nie moge tego zrobic...

Napisz program, który odczytuje jeden wiersz danych wejsciowych, a nastepnie wyswietla go wspak. Pamietaj, ze do pobrania jednego znaku mozesz uzyc uzyc funkcji scanf() ze specyfikatorem %c oraz że wcisniecie klawisza Enter generuje znak nowej linii (\n).

z gory dzieki za pomoc.

PS. Jak poziom tych zadan wyglada w kontekscie studiow informatycznych. Od pazdziernika rozpoczynam takie studia i chcialbym wiedziec, na ktorych zajeciach z programowania wykonuje sie takie zadania...

0

Na pierwszych laborkach/ćwiczeniach mozesz trafić na takie zadania (oczywiscie mówie o zajęciach z Języków Programowania, bo na zajęciach z Algorytmów i Struktur Danych zadania będą dużo trudniejsze)
http://winnie.ics.agh.edu.pl/dydaktyka/wdi/zadania.html tutaj masz troche zadań ze Wstępu do Informatyki na AGH

W zadaniu 3 po prostu zrób sobie pętle do while gdzie warunkiem będzie wczytany znak rożny od '\n'

char znak;
do
{
  scanf("%c",&znak);
 //wpisanie znaku do tablicy czy coś
}while(znak != '\n')

A dane mozesz wpisywać sobie do tablicy jaki problem? Jak ci nie wolno, to możesz to zrobić rekurencją jakąś, ale to nie jest dobry pomysł.

Co do pierwszych dwóch zadań to :

  1. Naucz sie formatowac kod (i korzystać z tagów <cpp> na forum)! Twój pierwszy kod sformatowany:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int n;
  double ewa, kasia;
  printf("    Kasia    Ewa \n");
  for (ewa=100, kasia=100, n=0; ewa>=kasia; ewa+=10, kasia+=0.05*kasia, n++)
    printf("%2.5f,  %3.5f \n\n", kasia, ewa);
  printf("przekroczy po: %d latach\n", n);
  printf("%2.5f,  %3.5f \n\n", kasia, ewa);

  getchar();
  return 0;
}

  1. system("pause"); nie jest dobrym rozwiązaniem, lepiej choćby getchar();
  2. Jak nie korzystasz z parametrów wywołania to jaki sens pisać
    int main(int argc, char* argv[])
    skoro wystarczy samo
    int main()
    ?
  3. Jak masz jedną instrukcje w pętli to nie pisz tam {}
  4. Jak chcesz zrobić x=x+Y; to lepiej używać x+=Y bo dziala szybciej.</cpp>
0

Kod jest dobry, tylko widzę u ciebie jeden zły nawyk.
Jeśli ktoś będzie czytał twój kod to w pętli for będzie szukał informacji na temat wartości początkowej licznika, warunku i skoku. Nic go w tym momencie nie interesuje, że Ewa miała 100zł, a Kasi kwota rośnie o 5% w każdym przebiegu pętli. Pisząc w ten sposób zaciemniasz tylko swój kod.
Przypisanie wartości początkowych wstaw przed pętlą for, a obliczenia w jej ciele.

int ewa = 100;
for( int n=0; ewa >= kasia; n++ )
{
    ewa = ewa + 10;

Wiem że dalej to śmiesznie wygląda, bo for nie jest tu chyba najlepszym wyborem pętli, ale mój zamysł widać.

Można się jeszcze przyczepić do kilku rzeczy, ale to są drobiazgi typu pisanie:
kasia=kasia+0.05*kasia;
zamiast:
kasia *= 1.05;

Z biegiem czasu jak będzie nabierał doświadczenia i ogłady to sam zaczniesz pisać w ten sposób.

0
  1. system("pause"); nie jest dobrym rozwiązaniem, lepiej choćby getchar();
  2. Jak nie korzystasz z parametrów wywołania to jaki sens pisać
    int main(int argc, char* argv[])
    skoro wystarczy samo
    int main()
  • te wszystkie rzeczy dodaje automatycznie moj program Dev C/C++...

mam do przegladniecia takie jeszcze jedno zadanko, wydaje mi sie ze dziala ono ok,

program ma liczyc sumy ciagow do granicy podawanej przez uzytkownika, oto te ciagi:
1.0+1.0/2.0+1.0/3.0+1.0/4.0+...

1.0-1.0/2.0+1.0/3.0-1.0/4.0+...

#include <stdio.h>
#include <stdlib.h>

int licznik;
double suma, x;
int granica;


int main(int argc, char *argv[])
{
  
  printf("Ile wyrazow chcesz zsumowac?\n");
  
  scanf("%d", &granica);
  
  for (suma=0, x=1, licznik=1; licznik<=granica; licznik++, x+=1.0)
  {
      suma+=1.0/x;
      printf("suma = %f gdy licznik = %d.\n", suma, licznik);
      }
  
  printf("\n\n\n\n\n");
  
  
      
      for (suma=0, x=1, licznik=1; licznik<=granica; licznik++, x+=1){
  
      
      suma+=1.0/x;
      printf("suma = %f gdy licznik = %d.\n", suma, licznik);

      x+=1;
      licznik++;

      suma-=1.0/x;
      printf("suma = %f gdy licznik = %d.\n", suma, licznik);
      }; 
      

  
  system("PAUSE");	
  return 0;
  
}
0

To jest tragedia co właśnie napisałeś...

  1. Na co ci zmienne globalne? Zasada jest taka zeby używane zmienne były tworzone na jak "najniższym" poziomie...
  2. Wywal Dev i zainstaluj Code::Blocks, bo formatowanie kodu w Devie woła o pomstę do nieba...
    Jak robisz jakis blok to OBA {} powinny być w tym samym "wcięciu" (wyjątek to formatowanie takie ze otwierająca klamra jest na koncu poprzedniej linii)
  3. Naucz się innej przydatnej pętli jaką jest while(), bo te twoje rozbudowane fory właśnie na while warto przerobić. Istota fora jest to zeby warunek poczatkowy, koncowy i skok były ze sobą powiązane, a u ciebie masz tam kilka różnych zmiennych i ktoś moze mieć problem ze zrozumieniem tego (ty sam za jakiś czas też)
  4. Po {} średnik pojawia się bardzo rzadko (czyt: przy deklaracji klasy i struktury) i na pewno nie po pętli. (nie jest to bląd, ale zbędna pusta instrukcja)
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int licznik=0;
  int granica;
  double suma = 0;
  double x=1;

  printf("Ile wyrazow chcesz zsumowac?\n");
  scanf("%d", &granica);

  while(licznik<granica)
  {
    suma+=1.0/x;
    printf("suma = %f gdy licznik = %d.\n", suma, licznik+1);
    x+=1;
    licznik++;
  }
  printf("\n\n\n\n\n");

  suma=0;
  x=1;
  licznik=0;
  while(licznik<granica)
    {
      suma+=1.0/x;
      printf("suma = %f gdy licznik = %d.\n", suma, licznik+1);
      x+=1;
      licznik++;
      suma-=1.0/x;
      printf("suma = %f gdy licznik = %d.\n", suma, licznik+1);
      licznik++;
    }
  getchar();
  return 0;
}

edit: @down: Poprawione. Nie zauwżyłem absolutnie karkołomnej operacji jaką przeprowadziłeś, czyli zwiększania licznika pętli for w jej ciele. Takich rzeczy sie nie robi, tymbardziej gdy warunek przerwania pętli jest związany z tym licznikiem. Bo bardzo ciężko sie takie coś analizuje.
A tą 2 pętle bym w ogóle inaczej zrobił, mnożąc przez -1 za każdym razem i zawsze dodając, coś w stylu:

int znak = 1;
while(licznik<granica)
    {
      suma+=znak*(1.0/x);
      printf("suma = %f gdy licznik = %d.\n", suma, licznik+1);
      x+=1;
      licznik++;
      znak*=-1;
    }
0

ok, rzeczywiscie tam lepiej uzyc while

sciagam tego code::blocks zobaczymy czy fajny :)

ale cos ten kod niepoprawnie dziala, po zamianie przez Ciebie tej petli...

0

ok, z ta druga petla dziala

sciagnalem code::blocks ale jak dla mnie strasznie koloruje skladnie, ciezko sie do tego przywyczaic...

znasz moze jakies inne srodowisko, ktore jest niezle, bo ten code::blocks cos mnie nie przekonuje...

0

Wiesz, że te kolory można zmienić?

0

a no tak :D

ale coraz bardziej mi sie podoba, jest bardziej rozbudowany, ustawilem juz normalne kolory ;)

chyba odstawie Deva...

0

tylko jedno mnie irytuje... :)

po kompilacji, gdy sa jakies bledy nic mi sie nie wyswietla, w Devie na dole programu byla taka ramka, ktora wyswietlala info z linijka z bledem itp.

Zaloze sie ze w tym programie tez to jest, tylko jak to wlaczyc?

0

juz ok, wszystko znalazlem

1 użytkowników online, w tym zalogowanych: 0, gości: 1